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

そのため、オブジェクトが作成されます。このオブジェクト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 に答える