2014-02-15 38 views
0
dynobj = {}; 
methods = ["method1","method2", "method3"]; 
for (var i = 0; i < methods.length; i++) { 
    dynobj[methods[i]] = function() { 
     alert("I am " + i); 
    }; 
}; 
dynobj.method2(); 
dynobj.method1(); 

我希望“我是1”和“我是0”,但是“我是3”和“我是3”。我期待的行为正确方法是什么?Javascript - 动态创建一个方法?

回答

4

尝试以下操作:

var dynobj = {}; 

var methods = ["method1", "method2", "method3"]; 

var length = methods.length; 

for (var i = 0; i < length; i++) { 
    dynobj[methods[i]] = (function (i) { 
     return function() { 
      alert("I am " + i); 
     }; 
    }(i)); 
} 

dynobj.method2(); 
dynobj.method1(); 

观看演示:http://jsfiddle.net/3Fxv5/

+0

为什么downvote? –