JavascriptEngine的Javascript Array.length属性/方法

JavascriptEngine的Javascript Array.length属性/方法,javascript,arrays,Javascript,Arrays,我只是好奇浏览器是如何直接完成的。我听说Javascript引擎中数组的.length属性实际上使用了不可见的setter和getter来实现ECMA-s标准的功能,ECMA-s标准规定:“每当更改length属性时,名称为数组索引且其值不小于新长度的每个属性都会自动删除”)。我知道在这种情况下需要setter,但是getter呢?我们真的需要调用本机getter来获取这个值吗?或者这只是理解Javascript引擎的一个错误?看看。Firefox可能就是这样做的,但我不确定其他浏览器 这真的重

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

看看。Firefox可能就是这样做的,但我不确定其他浏览器

这真的重要吗。长度可以在C++中实现,我知道。它可能是javascript引擎的一个内置部分,并且无论如何都不能在javascript中真正实现。用户需要知道的是,长度决定了数组的长度,如果更改了长度,数组的长度也会随之更改。

请查看。Firefox可能就是这样做的,但我不确定其他浏览器


这真的重要吗。长度可以在C++中实现,我知道。它可能是javascript引擎的一个内置部分,并且无论如何都不能在javascript中真正实现。作为用户,您只需要知道长度包含数组的长度,如果您更改它,数组的长度也会更改。

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

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

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

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

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

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

属性要么实现为字段,要么实现为setter/getter方法

如果它是一个字段,那么它只是一个值,当设置该值时,除了值发生更改外,不会发生其他任何事情


如果您有一个setter方法,以便在设置值时执行更多操作,那么您也有一个getter方法来匹配,即使getter方法除了返回值之外什么都不做。您不希望将实现属性的两种方法混合使用,只需在两个方向上进行操作就简单多了。

属性要么作为字段实现,要么作为setter/getter方法实现

如果它是一个字段,那么它只是一个值,当设置该值时,除了值发生更改外,不会发生其他任何事情


如果您有一个setter方法,以便在设置值时执行更多操作,那么您也有一个getter方法来匹配,即使getter方法除了返回值之外什么都不做。您不想将实现属性的两种方法混合在一起,只需在两个方向上都简单得多。

本机对象可以有自己的getter/setter。本机对象可以有自己的getter/setter。