首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript:是否有任何后门方式来访问数组的真正隐藏/私有长度属性?

Javascript:是否有任何后门方式来访问数组的真正隐藏/私有长度属性?
EN

Stack Overflow用户
提问于 2015-01-25 08:22:48
回答 2查看 67关注 0票数 0

我在JavaScript花园上了解到,数组长度属性是一个外观。它是一个API,而不是保持长度的文字属性。它充当实际长度属性的getter/setter:

代码语言:javascript
运行
复制
"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."

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-25 08:46:40

有趣的想法。我相信答案是否定的,你不能获得这个信息。我可以想象Array#length作为getter实现的原因仅仅是为了能够定义自定义设置器。

我会想象里面的东西是这样的:

代码语言:javascript
运行
复制
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;
    }
  });
}
票数 1
EN

Stack Overflow用户

发布于 2015-01-25 09:20:48

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

有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能有一个赋值设置器,但是:

代码语言:javascript
运行
复制
var x = [0,1,2,3];
x.length = 2; 

首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出一个getter比简单地返回其他方法更新的长度更有效。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28134555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档