JavaScript は、setInteval の関数パラメータで特定のオブジェクトを指すようにします_javascript のヒント

WBOY
リリース: 2016-05-16 18:35:41
オリジナル
1015 人が閲覧しました

この質問を見たとき、私はその時は問題が解決できずに混乱していましたが、長い間考えましたが、理解できませんでした。その後、オンラインで調べたところ、海外のウェブサイトで次のことを見つけました。 setInterval と setTimeout の後の関数のスコープは global です。つまり、 this の内部はグローバル オブジェクトを指します。
この問題は、ループ関数内で現在のオブジェクトを参照するためによく使用されます。クロージャを使用していますが、実際の状況はそれほど単純ではありません。オブジェクトのインスタンスが多すぎると、クロージャが乱雑になります。
ループ関数内でこれを渡さずに、現在のコンテキストのオブジェクトを指すようにしたいのです。パラメータまたはクロージャ (実際、これもクロージャですが、形式的にはより自然に見えます);
例: (コードの一部、関数は定期的にリクエストを送信することです)

コードをコピーします コードは次のとおりです:

var sendRequest=function(){}
sendRequest.prototype={
.................................................
................................ .........
beginSend:function() {
//ループ関数内の this がグローバル オブジェクトの代わりにこのオブジェクトを指すようにします
this.loop_send=setInterval((function( param){
return function(){param.sendARequest();}
})(this),this.options.interval);
sendARequest:function(){
this.num ;
this.checkLimit();
var callback = {
成功: this.handleSuccess、
失敗: this.handleFail、
引数: {
ハンドル: this,
timeout:500
}
}
var post_data="...."
//送信するデータが空でない場合、データの一部が取得されます
if(this.data_wait_for_send.length!=0){
for(var i=0,j=this.data_wait_for_send.length;ipost_data ="&content[]=" this.data_wait_for_send[i];
}
this.data_wait_for_send =[]
}
// debug(post_data)
var que = Connect.asyncRequest( 'POST'、this.options.getUrl、コールバック、post_data);
}、
.................................
. ...................
}

このようにして、sendARequest() 関数内で this を使用して参照できます。通常は現在のオブジェクトを参照し、現在のオブジェクトの変数とメソッドを使用するのは非常に便利ではないでしょうか。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート