gpt4 book ai didi

javascript - JS : is it possible to define getter functions on array members?

转载 作者:数据小太阳 更新时间:2023-10-29 06:15:03 25 4
gpt4 key购买 nike

我还没有找到关于这个主题的任何信息,如果这是一个非常奇怪的问题,请原谅我。

我知道 JS 允许将属性定义为访问器,这意味着它们在使用时会触发 getter 或 setter 函数。

我的问题是是否可以对数组成员执行相同的操作。

例如,我希望在这样分配时触发一个 setter 函数:

myObj[2] = 2 /* set function(value, index) { console.log(value + index) } */

如果这不可能,是否有任何其他方法可以扩展 [] 操作?

最佳答案

基本上,除非您对数组进行子类化,否则您不能。

即使是子类化,数组也比对象动态得多。与对象不同,它们会一直添加和删除项目,并且您必须能够将 getter 和 setter 与添加的项目一起动态附加到每个属性(键)。不实用。如果数组被子类化,您可以使用 getter 和 setter 修改它的长度属性,并尝试从更改到它的长度属性来观察数组,但这需要大量的数组差异。

我想对于数组最好使用 ES6 代理对象。您可以按如下方式进行;

function ProxyMaker(a){
return new Proxy(a, {
get: function(target, property, receiver) {
console.log(target+"'s "+property+" property has been accessed");
return target[property];
},
set: function(target, property, value, receiver) {
console.log(target+"'s "+property+" property has been modified");
return target[property] = value;
},
has: function(target, property) {
console.log(target+"'s "+property+" property has been checked");
return Reflect.has(target, property); // 10x to @Bergi
}
});
}

var p = ProxyMaker([]);
p[0] = 1;
p[0];
p.push(10);
p.unshift(7);
console.log(JSON.stringify(p))

关于javascript - JS : is it possible to define getter functions on array members?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com