我试图在javascript中循环定义函数......
for (var i in myArray) {
Object.defineProperty(object, "field"+i, { ... });
}
...并且每个函数都需要使用在该循环中设置的变量...
for (var i in myArray) {
Object.defineProperty(object, "field"+i, {
get: function() { return "some operation" + myArray[i]; }
});
}
...但是这不起作用,因为当我调用这些函数时(在定义它们之后很久),i
会计算myArray
中的最后一项。我在循环中定义的所有函数都返回相同(错误)的值。
有谁能告诉我如何实现我的目标:在我的getter函数中使用myArray[i]
?
答案 0 :(得分:2)
我使用工厂函数创建了一个额外的闭包:
function makeGetter(myString) {
return function () { return "some operation" + myString; };
}
for (var i in myArray) {
Object.defineProperty(object, "field"+i, {
get: makeGetter(myArray[i])
});
}
答案 1 :(得分:0)
这可以按照以下方式完成
for (var i in myArray)
{
var getter=function yourName () { return "some operation" + yourName.data;}
getter.data=myArray[i];
Object.defineProperty(object, "field"+i, {
get: getter});
}
您可以使用
定义一个函数 var test=function testit () {}
testit可用于从函数内部调用函数。 它是一个locale变量,它替换了arguments.callee,它在严格模式下被删除。
测试是在函数外部定义的,用于从外部调用