1

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

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

这样我就得到了一个 object randomObject,它定义了所有方法,做着完全相同的事情。问题是,每个方法都记录“foo”而不是被调用方法的名称。method调用方法时如何使变量保持不变?

4

2 回答 2

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();
于 2012-10-27T00:11:42.977 回答
1

您应该将其包装在一个自动执行的闭包中:

for (var i = methodNames.length - 1; i >= 0; --i) {
    (function(method) {
        randomObject[method] = function() {
            console.log(method);
        };
    })(methodNames[i]);
}​
于 2012-10-27T00:07:56.003 回答