Array.prototype 对象的 length 属性 - ES 5

ove*_*nge 5 javascript javascript-objects ecmascript-5

function类型对象中,length属性表示类型对象所需的参数数量function。例如,在下面的可视化中,对象objectlength中的字段的值为。FunctionArray1

在此输入图像描述

在上面的可视化中,lengthfield 也是objectobject 类型的成员Array.prototype,其值为0

MDN说:

Array.prototype.length反映数组中元素的数量。

cars遵循下面的&bikes数组中的定义,

var cars = new Array("Saab", "Volvo", "BMW");
var bikes = ["Honda", "Yamaha"];
Run Code Online (Sandbox Code Playgroud)

cars.__proto__.lengthbikes.__proto__.length还是0

多个数组对象( cars, bikes) 不能共享与 中的属性相同的length属性值。lengthArray.prototype

1)

根据MDN,这是一个正确的定义吗?

2)

length如果不是,字段中的含义是什么Array.prototype

Ber*_*rgi 2

MDN 说:

Array.prototype.length反映数组中元素的数量。

这是一个正确的定义吗?

有点,是的。.length与数组相关的三个不同属性:

  • Array.length正如您所说,它是所有函数都具有的实例(“自己的”)属性,并且与数组无关。
  • arr.length,其中arr是一个数组实例(例如arr = ['ex', 'ample'])。每个数组都有这个特殊属性,其作用有点像 getter/setter,自动确定对象具有的最高数组索引属性。
  • Array.prototype.length是 #2 的特殊情况,因为Array.prototype它本身只是一个数组对象 - 默认情况下为空,因此.length == 0.

MDN 有点不准确,因为它将实例属性与从其文档页面中的原型继承的属性混合在一起。正如您的图表正确可视化的那样,所有cars,bikesArray.prototype对象确实都有自己的.length属性和自己的值(当然,更改一个对象不会更改其他对象)。

那么Array.prototype.length有什么目的呢?实际上并不多,因为它通常被继承自 的数组对象的自己的属性所遮蔽Array.prototype。因此,除了因为规范说这Array.prototype是一个数组实例并且具有该属性而存在之外,它还可以作为继承自的普通(非数组)对象的合理默认.length值- 但这种情况非常罕见。Array.prototype