为什么Object.getOwnPropertyNames()也给出了原型上的方法?

时间:2017-11-18 17:25:59

标签: javascript



var properties = Object.getOwnPropertyNames(Array); 
console.log(properties);




为什么此代码也会列出Array.prototype对象的属性?根据我的理解,它应该列出直接在Array对象上找到的这些属性:

Array.length
Array.constructor
Array.prototype
Array.isArray
Array.of
Array.observe
Array.from
Array.unobserve

2 个答案:

答案 0 :(得分:1)

它运作正常。

  

Object.getOwnPropertyNames()返回一个数组,其元素是对应于直接在obj上找到的可枚举和不可枚举属性的字符串。

<强> MDN

var propertiesOfArray = Object.getOwnPropertyNames(Array);

console.log(propertiesOfArray);

var propertiesOfArrayPrototype = Object.getOwnPropertyNames(Array.prototype);

console.log(propertiesOfArrayPrototype);

如果 Array.prototype 的属性符合您的要求,请不要使用数组,请使用 Array.prototype 。见更新。还有accepted answer here

演示

答案 1 :(得分:1)

您必须使用Firefox。它确实实现了Array构造函数的非标准扩展,其中Array本身就是generics function are available as static methods。它们是自己的属性,与Array.prototype上的属性名称相同,但值不同。它们不存在于其他浏览器和won't be in future Firefoxes中。