Javascript:有没有后门方法来访问数组的真正隐藏/私有长度属性?

时间:2015-01-25 08:22:49

标签: javascript

我在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."

是否有任何后门方法可以访问数组的真正隐藏/私有长度属性?

2 个答案:

答案 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;
    }
  });
}