2016-04-17 7 views
0

次のコードは動作していますが、より良い方法があると感じています。高次関数のスコープへの参照を渡しています。高次関数リファレンスJS

var p=this; 
    this.nodeModal.find(".modal-footer .save").click(function(){ 
     p.saveAndClose(); 
    }); 

高次関数の参照を渡す簡単な方法はありますか?バインディングのようなもの?あなたはbind() methodを探している

答えて

2

それとも、あなたは矢印機能で、ES6を使用している場合:私はバインドとしようと試みてきたが、それはなかった

this.nodeModal.find(".modal-footer .save").click(() => { 
    this.saveAndClose(); 
}); 
+0

それは動作します!あなたは、矢印の機能について何が起こっているのか少し説明しますか?ありがとう – tul1

+1

確かに、私は携帯電話の笑を使用していない場合、私はそれ以上のことを説明しているだろう、申し訳ありません。 arrow関数は、ES6の新機能で、Chromeのような最新のブラウザと互換性がありますが、古いブラウザで使用するためには、コードをBabelのようなコンパイラでES5コードにコンパイルする必要があります。 arrow functionファンクションの中に 'this'の参照を保持します。詳しくはhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functionsを参照してください –

+0

BTW、フードの下、バベルは単にあなたと同じことをしました。コードをコンパイルして内部を見ることができるので、魔法のようには見えません。 –

0

this.saveAndClose.bind(this) 
+0

次のエラーがスローされます。TypeError:this.saveAndCloseは未定義です。私は、この関数は高次関数スコープで定義されていないためだと思います。 – tul1