4

オブジェクトの関数内にいて、外部関数を呼び出して関数への参照を引数として渡す必要があります。この最後の関数引数はキーワードthisを数回使用しているため、オブジェクトにスコープを設定する必要があります。私はこれを解決しました:

   MyObj.prototype.internalFunc= function(data){
       this.doSomethingWithReturnedData(data);
   };

   MyObj.prototype.doSomething= function(){
       var $this = this;
       externalFunction(this.someVar, function(data){ $this.internalFunc(data); });
   };

   var objInst = new MyObj();
   objInst.doSomething();

この厄介なことを避けるために離れているかどうか知りたいvar $this = thisです。

私も次のことを思いました:

   //... (same as before)
   MyObj.prototype.doSomething= function(){
       var $this = this;
       externalFunction(this.someVar, this.internalFunc, this);
   };
   //... (same as before)

   function externalFunction(arg1, cbfunc, thisref){
       //bla bla things
       cbfunc.call(thisref, blablaData);
   };

しかし、私はそれが面倒だとも思います。

もっと良い方法があると思いますが、私はそれを見ていません! 前もって感謝します!

4

2 に答える 2

2

十分に最近のブラウザを使用していて、それがFunction.bind.

これにより、特定のスコープにバインドされた関数を作成できます。別の言い方をすれthisば、その関数内で何が起こるかを定義することができます。したがって、このようにすることができます。

MyObj.prototype.doSomething= function(){
   externalFunction(this.someVar, this.internalFunc.bind(this, data));
};

上記のリンクをたどって一番下までスクロールすると、ブラウザのサポートに関する情報が表示されます。

編集

実際には、もう 1 つのオプションがあります。それは、世の中にある多くのライブラリとフレームワークの 1 つを使用することです。その塩の価値があるものは、bindhitchproxyまたはその他の方法で利用できます。ただし、これらはすべてネイティブ JS アプローチをまとめているだけですが、多くの場合、この手法をさらに価値のあるものにする便利な追加機能を提供します。

于 2013-01-22T16:05:11.410 に答える
1

thisローカル変数への割り当ては問題なく一般的です。

$.proxy多くのライブラリは、ラッパー関数を返し、 jQuery (または_.bindunderscore.js) などで実行コンテキストを設定するメソッドを提供することで、2 番目のアプローチをより簡単にします。

于 2013-01-22T16:03:47.637 に答える