Javascript';s";Object.getOwnPropertyNames“;丢失的属性?

Javascript';s";Object.getOwnPropertyNames“;丢失的属性?,javascript,prototype,javascript-objects,Javascript,Prototype,Javascript Objects,我喜欢Object.getOwnPropertyNames方法。它似乎是从JS外壳中学习对象的一个非常有用的工具 然而,让我抓狂的是getOwnPropertyNames似乎缺少一些(注意:在我的测试中,我运行的是ECMA5实现Google Chrome版本28.0.1500.95) 下面是一个例子: > var x= [] undefined > x.constructor function Array() { [native code] } > Object.getOwnP

我喜欢Object.getOwnPropertyNames方法。它似乎是从JS外壳中学习对象的一个非常有用的工具

然而,让我抓狂的是getOwnPropertyNames似乎缺少一些(注意:在我的测试中,我运行的是ECMA5实现Google Chrome版本28.0.1500.95)

下面是一个例子:

> var x= []
undefined
> x.constructor
function Array() { [native code] }
> Object.getOwnPropertyNames(x)
["length"]
然而很明显,x有很多属性!(例如)

有人能解释一下这里发生了什么吗?谢谢D

编辑:好的!我看到getOwnPropertyNames只获取手头对象的属性名。有没有一种简单的方法可以获得继承的属性?或者,唯一的方法可能是遍历object.constructor.prototype.\uuuuuuuuuuu?

根据

\uuuu proto\uuu
属性已弃用,不应使用<代码>对象。应使用getPrototypeOf而不是
\uuuu proto\uuuu
getter来确定对象的[[Prototype]]

> x = [];
[]
> Object.getOwnPropertyNames(Object.getPrototypeOf(x));
["length", "constructor", "toString", "toLocaleString", "join", "pop", "push", "concat",
 "reverse", "shift", "unshift", "slice", "splice", "sort", "filter", "forEach", "some", 
 "every", "map", "indexOf", "lastIndexOf", "reduce", "reduceRight"]

编辑后的问题可能与
> x = [];
[]
> Object.getOwnPropertyNames(Object.getPrototypeOf(x));
["length", "constructor", "toString", "toLocaleString", "join", "pop", "push", "concat",
 "reverse", "shift", "unshift", "slice", "splice", "sort", "filter", "forEach", "some", 
 "every", "map", "indexOf", "lastIndexOf", "reduce", "reduceRight"]