2011-01-27 6 views
5

これは他の何よりも健全性のチェックです。私はJavaScriptでのクロージャを操作する場合、私は多くの場合、関数内から外側のクラスにアクセスするには、次のパターンを使用することを発見しました:Javascriptの終了で 'this'にアクセス

MyClass.prototype.delayed_foo = function() { 
    var self = this; 
    setTimeout(function() { 
     self.foo(); // Be nice if I could use 'this' here 
    }, 1000); 
}; 

は明らかにこれはうまく動作し、それもで動作するように大きな手間ではありません。私の脳の裏には、この「あなたはこれをあまりにも複雑にしています、ダミー!これは一般的に受け入れられているパターンですか?

答えて

6

selfの代わりにthatがよく使用されることを除いて、これは一般的に受け入れられているパターンです。

+0

知ります。私はちょっと身近な感じを選んだ。 :)(Big Pythonファン!) – Toji

4

あなたはこのような結合機能使用して卑劣なを引くことができます。

var Binder = function(fnc, obj) { 
    return function() { 
     fnc.apply(obj, arguments); 
    }; 
}; 

をしてから

MyClass.prototype.delayed_foo = function() { 
    setTimeout(Binder(function(){ 
     this.foo("Lols"); 
    },this), 1000); 
}; 

jsfiddle例にお電話を変更:良い

http://jsfiddle.net/ctrlfrk/6VaV6/

+0

これは確かに面白い小さなトリックですが、コードを読んで、私は再びC#で匿名の代理人をバインドして戻ってきたように感じます!おそらくパフォーマンスオーバーヘッドと余分なコードの複雑さの価値がないので、私はクラスvarを "this"と呼ぶことができます。 A +は創造性のために! – Toji

関連する問題