【问题标题】:Javascript Array .length property/method of JavascriptEngineJavascriptEngine 的 Javascript Array .length 属性/方法
【发布时间】:2010-10-11 11:40:31
【问题描述】:

我只是好奇浏览器是如何直接做到这一点的。我听说 Javascript 引擎中 Array 的 .length 属性实际上使用了不可见的 setter 和 getter 来实现 ECMA-s 标准的功能,该标准说:“每当更改长度属性时,名称为数组索引的每个属性都不会更小比新长度自动删除”)。我知道在这种情况下需要 setter,但是 getter 呢?我们真的需要调用原生 getter 来获取这个值吗?或者这只是在某个地方理解 Javascript 引擎的一些错误?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    属性可以作为字段实现,也可以作为 setter/getter 方法实现。

    如果它是一个字段,那么它只是一个值,在设置值时不会发生任何事情,只是值会发生变化。

    如果您有一个 setter 方法以便在设置值时执行更多操作,那么您也有一个 getter 方法可以匹配,即使 getter 方法除了返回值之外没有做任何其他事情。您不想混合实现属性的两种方式,只是在任一方向上都更简单。

    【讨论】:

      【解决方案2】:

      对于初学者,JavaScript Array 对象有一个函数属性 .length(),它将返回数组实例的当前长度。 Getter 和 setter 可以在 JavaScript 1.6 中定义(我认为),但它没有被广泛采用,而且我没有看到太多使用它。 getter 和返回值的函数之间的唯一区别是语法。引擎可以根据分配方向调用 Getter 和 setter。

      var obj = {myProp:0}.myProp; // getting
      obj.myProp = 1; // setting 
      

      上面的例子有点古怪,但我想你明白了......

      【讨论】:

        【解决方案3】:

        看看defineGetter and defineSetter。这可能是 Firefox 的做法,但我不确定其他浏览器。

        真的很重要吗?据我所知,.length 可以在 C++ 中实现。它可能是 javascript 引擎的内置部分,无论如何都不能在 javascript 中真正实现。作为用户,你只需要知道长度就是数组的长度,如果你改变它,数组的长度就会改变。

        【讨论】:

        • 原生对象可以有自己的getter/setter。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        相关资源
        最近更新 更多