我想从方法名称数组中定义几个方法,如下所示:
var methodNames = ['foo', 'bar', 'baz'],
randomObject = {}, method;
for( var i = methodNames.length - 1; i >= 0; --i ){
method = methodNames[ i ];
randomObject[ method ] = function(){
console.log( method );
}
}
因此我最终得到了一个对象randomObject
,其中定义的所有方法完全相同。问题是,每个方法都记录'foo'而不是被调用方法的名称。调用方法时,如何使变量method
保持不变?
答案 0 :(得分:4)
我不知道这是否是使用闭包的最佳方式,但我认为这是有效的...
更新:
var methodNames = ['foo', 'bar', 'baz'],
randomObject = {},
method;
for (var i = methodNames.length - 1; i >= 0; --i) {
method = methodNames[i];
randomObject[method] = (function(met){
return function () {
console.log(met);
}
})(method);
}
randomObject.baz();
randomObject.bar();
randomObject.foo();
答案 1 :(得分:1)
你应该将它包装在一个自动执行的闭包中:
for (var i = methodNames.length - 1; i >= 0; --i) {
(function(method) {
randomObject[method] = function() {
console.log(method);
};
})(methodNames[i]);
}