我在JavaScript Garden了解到数组长度属性是一个外观。它是一个API,而不是保存长度的文字属性。它充当实际长度属性的getter / setter:
"While the getter of the length property simply returns the number of elements that are contained in the array, the setter can be used to truncate the array."
是否有任何后门方法可以访问数组的真正隐藏/私有长度属性?
答案 0 :(得分:2)
您认为 Array.prototype.length 是一个getter,或者有任何特殊的隐藏别名是什么逻辑?
有多种方法可以修改数组长度的值( pop , push , shift ,不合时宜的等等,所以在我看来,虽然可能有一个用于分配的setter,但是:
var x = [0,1,2,3];
x.length = 2;
首先创建一个长度为4的数组然后将其长度设置为2,从而删除最后两个成员,我无法看到任何方式获取器比仅返回长度更有效由其他方法更新。
为什么 length 会以其他方式实施?如果是的话,这个隐藏长度的目的是什么?因为如果实现它将完全取决于实现,它将如何使用?
答案 1 :(得分:1)
有趣的想法。我确定答案是肯定的,你没有权限。我想象Array#length
作为getter实现的原因完全是为了定义自定义setter。
我想象内部看起来像这样:
function FakeArray() {
var _length = 0;
Object.defineProperty(this, 'length', {
get: function() {
return _length;
},
set: function(length) {
// some functionality to chop the array
this.splice(length);
_length = length;
return _length;
}
});
}