我只是好奇这是如何通过浏览器直接完成的。我听说Javascript Engines中Array的.length属性实际上使用不可见的setter和getter来实现ECMA-s标准的功能,它说:“每当更改length属性时,每个属性的名称都是数组索引,其值不小比新长度自动删除“)。我知道在这种情况下需要setter,但getter是什么?我们真的需要调用native getter来获取这个值吗?或者在某处理解Javascript引擎只是一个错误?
答案 0 :(得分:3)
属性可以实现为字段,也可以实现为setter / getter方法。
如果它是一个字段,那么它只是一个值,当设置该值时,不会发生比该值更改更多的事情。
如果您有一个setter方法,以便在设置值时执行更多操作,您还可以使用getter方法进行匹配,即使getter方法不执行任何操作,只需返回值即可。你不想混淆实现属性的两种方式,在任何一个方向上都可以更简单。
答案 1 :(得分:2)
看看defineGetter and defineSetter。这可能是Firefox的用途,但我不确定其他浏览器。
真的重要吗?我知道,.length可以用c ++实现。它可能是javascript引擎的内置部分,无论如何都无法在javascript中实现。您(用户)需要知道的是,长度保持数组的长度,如果更改它,则数组的长度会发生变化。
答案 2 :(得分:1)
对于初学者,JavaScript Array对象有一个函数属性.length(),它将返回数组实例的当前长度。 Getters和setter可以在JavaScript 1.6(我认为)中定义,但它没有被广泛采用,我没有看到太多使用它。 getter和返回值的函数之间的唯一区别是语法。引擎和设置器可以由引擎调用,具体取决于分配方向。
var obj = {myProp:0}.myProp; // getting
obj.myProp = 1; // setting
上面的例子有点时髦,但我认为你明白了......