2016-07-18 22 views
2

最近、私はjQueryを使ってJavaScriptのOOPを使用しようとした関数ではありません、 私はこのコードを書きました。JavaScriptがthis.updateが

JavaScriptのOOPをjQueryでより良い方法で使用するにはどうしたらよいですか?この問題をどうやって解決できますか?

答えて

3

これは範囲の問題です。 「this」は「each」関数呼び出しの前と呼び出しの前では異なっていることに注意してください。

スコープは、ローカル変数、この場合は「me」に割り当てることで使用できます。

init:function() { 
    var me = this; 
     $.each(this.types, function(key, value) { 
      me.update(key, value); 
     }); 
    }, 

スコープの違いを確認したい場合は、両方にログオンしてコンソールにチェックインしてください。

ここでは最初の「this」はグローバルスコープですが、もう1つ(匿名メソッド内)はローカルスコープです。

init:function() { 
     console.log(this); 
     $.each(this.types, function(key, value) { 
      console.log(this); 
     }); 
    }, 

あなたはこの範囲でより明確化のためにこれを参照することができます。http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this/ @Ashが言ったことに加えて

+0

のファンがいますありがとうございます!そして、JavaScript OOPでjQueryを使用するより良い方法がありますか? –

+0

私はあなたがこのアナロジーを使用している方法で問題を予見できません。持ち歩くと、あなたがそれを使用するにつれてもっと学びます。 – Ash

+0

他の人がこれを見つけることができるように、それがあなたのために働くなら、答えとしてマークしてください。 – Ash

2

、私はbind

init:function() { 
    $.each(this.types, function(key, value) { 
    this.update(key, value); 
    }.bind(this); 
},