从方法名称数组中定义循环中的方法

时间:2012-10-27 00:05:48

标签: javascript

我想从方法名称数组中定义几个方法,如下所示:

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保持不变?

2 个答案:

答案 0 :(得分:4)

我不知道这是否是使用闭包的最佳方式,但我认为这是有效的...

更新:

http://jsfiddle.net/ZDrCK/1/

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]);
}​