为什么 length 属性 属于数组对象?

Why is length property owned by an array object?

还有其他示例,但为了简单起见,我们以 length 属性 为例:

[].hasOwnProperty("length")
//==> true

正如我们所知,数组的 length 属性 驻留在 Array.prototype 上,因此只需沿着原型链向上移动即可从任何数组实例轻松访问它,为什么要将其复制下来?与浏览器中的具体实现有关系吗? (上面的代码示例在 chrome 控制台中执行)。甚至 MDN 也明确指出:“...方法和属性不会在原型链中从一个对象复制到另一个对象。它们是通过沿着链向上移动来访问的...”

很简单:因为每个数组实例都有不同的 .length 值。

.length 属性 本来可以是一个 getter/setter ,它会从共享原型对象继承,但 JavaScript 的初始设计带有数据 属性 随元素 creation/removal.

自动更新

length property resides on Array.prototype

存在 Array.prototype.length 属性,但只是因为 Array.prototype is itself an array。请注意,它的值为 0 - 您不希望它被继承到所有数组。