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
答案 0 :(得分:3)
Array.prototype
和a.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 的长度,反之亦然。