程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 讓setInteval裡的函數參數中的this指向特定的對象

讓setInteval裡的函數參數中的this指向特定的對象

編輯:ASP技巧

話說阿裡巴巴今年的校園招聘有一道題目考了一個知識點,那就是setInterval的參數函數裡的this指向.

看到這個題,我蒙了,因為那時候我不清除這個問題,想了半天沒想出來,後來到網上一查,在國外的某網站查到說setInterval和setTimeout之後的函數的作用域是全局的,也就是裡面的this指向的是全局對象.

這個問題可麻煩了,我經常要在循環函數裡用this來引用當前對象,也許你想到可以用閉包,不過實際情況並非如此簡單,對象實例多了之後,閉包也亂套了.

我的願望就是讓循環函數裡的this仍然指向當前上下文的對象,無需傳參數,無需閉包(其實這也是閉包,只是形式上看著比較自然而已);

例如:(一部分代碼,作用是定時發送請求)

  1 var sendRequest=function(){}

2 sendRequest.PRototype={
3 .............................
4 .............................
5 beginSend:function(){
6     //使循環函數裡的this指向本對象,而不是全局對象
7     this.loop_send=setInterval((function(param){
8        return function(){param.sendARequest();}
9     })(this),this.options.interval);
10 },
11 sendARequest:function(){
12      this.num++;
13      this.checkLimit();
14       var callback = {
15                             success: this.handleSuccess,
16                             failure: this.handleFail,
17                             argument: {
18                                 handle: this,
19                                 timeout:500
20                             }
21       }
22         var post_data="...."
23       //如果待發送的數據不為空,則將取出一條數據發到後台
24       if(this.data_wait_for_send.length!=0){
25       for(var i=0,j=this.data_wait_for_send.length;i<j;i++){
26            post_data+="&content[]="+this.data_wait_for_send[i];
27        }
28         this.data_wait_for_send=[]
29      }
30   //       debug(post_data)
31     var que = Connect.asyncRequest('POST', this.options.getUrl, callback,post_data);
32  },
33 ......................
34 ......................
35 }
36

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved