Object.getPrototypeOf不工作?

时间:2012-03-24 18:25:07

标签: javascript prototype

我正在阅读this post。它定义了一个简单的数组:

var myArray = [1, 2];
myArray.push(3);
myArray.reverse();
myArray.pop();
var length = myArray.length;

然后尝试(并成功)通过Object.getPrototypeOf获取其原型。但是,当我在Firebug和Chrome的控制台中测试它时,我得到一个空数组。为什么呢?

然而,当我为一个对象做同样的事情时(在这种情况下,同一篇文章中定义的点对象),我实际上得到了它的原型。

2 个答案:

答案 0 :(得分:3)

Chrome的开发者工具将Array.prototype显示为数组,因为它足以满足此行为的两个要求:

  • 拥有.length属性
  • 具有.splice功能

数组实例具有这些属性,因此您将数组视为实际数组,这是有帮助的。问题是Array.prototype也是根据Chrome开发人员工具的数组,因为这些规则(which it also is,但它不是一个非常有用的可视化,因为它不应该有元素。)

如果您评估Object.getPrototypeOf(myArray) === Array.prototype,则会获得true。这只是Chrome的开发者工具,不会像您期望的那样显示Array.prototype

答案 1 :(得分:1)

这是因为Array类的原型是/ Array实例,它在Webkit控制台上有自定义显示。所以这是你想要的原型。

它是空的,因为你总是在实例(myArray)上存储值,而不是原型上的/。

要扩展方法和字段,请执行以下操作:

for-in or Object.getOwnPropertyNames(Object.getPrototypeOf(myArray));