You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Object.getOwnPropertyNames无法获取Date实例的方法?

问题解答

你遇到的情况是因为Object.getOwnPropertyNames()只会返回对象自身定义的属性,而date1作为Date的实例,它自身并没有任何属性——那些toISOString()之类的方法,其实是存在于Date.prototype(也就是date1的原型)上的,属于原型链继承来的属性,所以不会被Object.getOwnPropertyNames(date1)捕获到。

要获取这些方法,有几种实用方式:

1. 直接获取原型上的所有属性

既然方法都在Date.prototype里,直接对原型调用Object.getOwnPropertyNames()就能拿到所有原型属性(包括不可枚举的):

let date1 = new Date();
// 获取Date原型的所有属性(包括toISOString等方法)
Object.getOwnPropertyNames(Date.prototype);

2. 遍历整个原型链获取所有属性

如果想拿到实例自身+原型链上的所有属性(包括不可枚举的),可以写一个遍历原型链的函数:

function getAllProperties(obj) {
  const props = new Set();
  let currentObj = obj;
  // 遍历原型链直到最顶层的null
  while (currentObj) {
    Object.getOwnPropertyNames(currentObj).forEach(prop => props.add(prop));
    currentObj = Object.getPrototypeOf(currentObj);
  }
  return Array.from(props);
}

// 使用示例
const date1 = new Date();
console.log(getAllProperties(date1));

3. 获取所有可枚举的属性(包括原型链)

如果只需要可枚举的属性,用for...in循环即可(它会遍历原型链上的可枚举属性):

const date1 = new Date();
for (const prop in date1) {
  console.log(prop); // 输出所有可枚举属性,包括原型上的方法
}

内容的提问来源于stack exchange,提问作者Teoman shipahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:40:41