我在JavaScript花园上了解到,数组长度属性是一个外观。它是一个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."
是否有任何后门方式来访问数组的真正隐藏/私有长度属性?
发布于 2015-01-25 08:46:40
有趣的想法。我相信答案是否定的,你不能获得这个信息。我可以想象Array#length
作为getter实现的原因仅仅是为了能够定义自定义设置器。
我会想象里面的东西是这样的:
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;
}
});
}
发布于 2015-01-25 09:20:48
您认为Array.prototype.length是一个getter,或者有任何特殊的隐藏别名的逻辑是什么?
有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能有一个赋值设置器,但是:
var x = [0,1,2,3];
x.length = 2;
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出一个getter比简单地返回其他方法更新的长度更有效。
为什么长度会以其他方式实现?如果是的话,这个隐藏长度的目的是什么?既然它的实现完全依赖于实现,那么它将如何使用呢?
https://stackoverflow.com/questions/28134555
复制相似问题