gpt4 book ai didi

javascript - 在循环中设置 javascript DefineGetter 和 DefineSetter

转载 作者:行者123 更新时间:2023-11-30 23:44:24 26 4
gpt4 key购买 nike

为什么每次迭代都会这样:

var o = {};

var foo = [['a',1],['b',2],['c',3],['d',4],['e',5]];

for(var i = 0; i < 5; i++)
{
o.__defineGetter__(foo[i][0], function() {
return foo[i][1];
});
console.info(JSON.stringify(o));
}

重置所有先前的分配并输出:

{"a":1}
{"a":2,"b":2}
{"a":3,"b":3,"c":3}
{"a":4,"b":4,"c":4,"d":4}
{"a":5,"b":5,"c":5,"d":5,"e":5}

当我期望/想要完成的是:

{"a":"1","b":"2","c":"3","d":"4","e":"5"}

如何实现我想要的目标?

最佳答案

您需要创建一个函数,该函数返回一个执行您想要的操作的函数(这只是因为闭包在 JavaScript 中的工作方式)。这个例子应该可以工作。

var o = {};

var foo = [['a',1],['b',2],['c',3],['d',4],['e',5]];

var getFunc = function(val){
return function() {
return val;
}
};

for(var i = 0; i < 5; i++)
{
var func = getFunc(foo[i][1]);
o.__defineGetter__(foo[i][0], func);
}
console.info(JSON.stringify(o));

关于javascript - 在循环中设置 javascript DefineGetter 和 DefineSetter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558240/

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