我不知道如何正确地问我需要什么,所以让我试试..
如何将当前变量内容(文字)传递给以动态创建的函数?
使用以下代码可能会更好理解:
function MyClass(){
for (i = 1; i <= 10; i++){
this['show' + i] = function(){
alert('You called show' + i);
};
}
}
var obj = new MyClass();
obj.show3();
我希望在警告中显示的是“你叫show3”而不是“show11”。
由于
答案 0 :(得分:2)
由于javascript没有块范围(直到ECMAScript 6中的let
),因此原始函数将使用相同的i值绑定。
调用另一个自己生成一个新函数,你可以避免这种情况,并给你不同的值。
function MyClass() {
for (i = 1; i <= 10; i++) {
this['show' + i] = myFunc(i);
}
}
function myFunc(i) {
return function() {
alert(i);
}
}
var obj = new MyClass();
obj.show3();
答案 1 :(得分:1)
JavaScript中有一种称为绑定的机制。您可以将范围和任何变量绑定到函数中,以便在函数内部使用它们。范围将在函数内定义this
关键字。所有其他绑定变量都将作为参数提供,因此此示例中的i
变量将不具有全局但本地范围,并且在函数创建中传递了值。
for (i = 1; i <= 10; i++){
this['show' + i] = function(i){
alert('You called show' + i);
}.bind(this,i);
}