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

Javascript:是否有任何后门方法可以访问数组的真实隐藏/私有长度属性?,javascript,Javascript,我在第一次会议上了解到数组长度属性是一个facade。它是一个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." 是否有任何后门方法可以访问数组的真实

我在第一次会议上了解到数组长度属性是一个facade。它是一个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."

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

有趣的想法。我相信答案是否定的,你没有访问权限。我可以想象,
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;
    }
  });
}

好主意。我相信答案是否定的,你没有访问权限。我可以想象,
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;
    }
  });
}

好主意。我相信答案是否定的,你没有访问权限。我可以想象,
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;
    }
  });
}

好主意。我相信答案是否定的,你没有访问权限。我可以想象,
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;
    }
  });
}

您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么

有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:

var x = [0,1,2,3];
x.length = 2; 
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效


为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?既然实现了它,它将完全依赖于实现,那么如何使用它呢?

您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么

有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:

var x = [0,1,2,3];
x.length = 2; 
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效


为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?既然实现了它,它将完全依赖于实现,那么如何使用它呢?

您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么

有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:

var x = [0,1,2,3];
x.length = 2; 
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效


为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?既然实现了它,它将完全依赖于实现,那么如何使用它呢?

您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么

有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:

var x = [0,1,2,3];
x.length = 2; 
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效


为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?如果实现了它,它将完全依赖于实现,那么如何使用它呢?

为什么?为什么你认为有“真实”属性?谁说有这样的东西?这篇文章暗示array.length只是一个getter方法。这是不真实的吗?它描述的是行为,而不是实现。我想,它实际上是用C代码实现的。无论如何,为什么要这样做?“而getter…只是返回数组中包含的元素数”是不正确的<代码>新数组(10)创建长度为10且成员为零的数组。长度属性比这更复杂。为什么?为什么你认为有“真实”属性?谁说有这样的东西?这篇文章暗示array.length只是一个getter方法。这是不真实的吗?它描述的是行为,而不是实现。我想,它实际上是用C代码实现的。无论如何,为什么要这样做?“而getter…只是返回数组中包含的元素数”是不正确的<代码>新数组(10)创建长度为10且成员为零的数组。长度属性比这更复杂。为什么?为什么你认为有“真实”属性?谁说有这样的东西?这篇文章暗示array.length只是一个getter方法。这是不真实的吗?它描述的是行为,而不是实现。我想,它实际上是用C代码实现的。无论如何,为什么要这样做?“而getter…只是返回数组中包含的元素数”是不正确的<代码>新数组(10)创建长度为10的数组