是什么array.prototype.length给我一个错误

时间:2014-12-05 00:11:09

标签: javascript

array.length和array.prototype.length有什么区别?

MDN says它们应该在功能上等同。有什么不同?我什么时候应该使用另一个?为什么后者给我一个错误?

var a = [1,2,3,4,5];
console.log(a.length);//5
console.log(a.prototype.length);// Uncaught TypeError: Cannot read property 'length' of undefined 

2 个答案:

答案 0 :(得分:3)

Array.prototypea.prototype之间存在差异(其中a是数组)。

没有a.prototype之类的东西。实例没有这个属性,只有它们的构造函数(Javascript引擎以其他一些特定于引擎的非标准方式将它附加到实例)。

答案 1 :(得分:3)

Array.prototype是一个长度最初设置为0的数组。

数组实例有自己的,特殊的,自我调整的长度属性,所以当你这样做时:

var a = [];
console.log(a.length);

您看到 a 的长度属性的值,它不会从其[[Prototype]]继承。当你这样做时:

console.log(Array.prototype.length);

您正在查看 Array.prototype 数组的长度,该数组是具有自己的length属性的不同对象。更改Array实例长度不会影响 Array.prototype 的长度,反之亦然