2010-07-09 问题

下面这段代码我用 firebug 跟踪发现 87 行 handleFunc 函数中的this 居然是 window对象?

 _handleFunc.call(this); 不能正常运行,在 87 行 handleFunc 函数中 arguments 函数为空。

为什么会是这样的呢? 

  1 <script type="text/javascript">
  2 
  3 
  4 var baseUrl = "http://g";
  5 
  6 var divObj = new Object();
  7 
  8 divObj.url = new Array();
  9 divObj.url.push("/index.php/Service/Salaallot");
 10 divObj.url.push("/index.php/Service/Salashelve");
 11 divObj.url.push("/index.php/Service/Sbch");
 12 divObj.url.push("/index.php/Service/Servicesend");
 13 divObj.url.push("/index.php/Service/Fault");
 14 
 15 divObj.name = new Array();
 16 divObj.name.push("Test1");
 17 divObj.name.push("Test2");
 18 divObj.name.push("Test3");
 19 divObj.name.push("Test4");
 20 divObj.name.push("Test5");
 21 
 22 
 23 //创建DIV,DIV1....DIV5
 24 var ajax = createAjax();
 25 ajax.url = [];
 26 ajax.divID = [];
 27 ajax.ajaxIDLength = divObj.url.length;
 28 for(var i=0;i<divObj.url.length;i++)
 29 {
 30     var bDiv = document.createElement("div");
 31     bDiv.setAttribute("id","div_" + i.toString());
 32     if(![-1,])
 33         bDiv.setAttribute("cssText","width:98%;height:15%;float:left;");
 34     else
 35         bDiv.setAttribute("style","width:98%;height:15%;float:left;");
 36     document.body.appendChild(bDiv);
 37     
 38     var tDiv = document.createElement("div");
 39     tDiv.setAttribute("id","div_" + i.toString() + "_t");
 40     if(![-1,])
 41         bDiv.setAttribute("cssText","width:100%;height:20%;float:left;");
 42     else
 43         bDiv.setAttribute("style","width:100%;height:20%;float:left;");    
 44     bDiv.appendChild(tDiv);
 45     tDiv.innerHTML = divObj.name[i];
 46     
 47     var fDiv = document.createElement("div");
 48     fDiv.setAttribute("id","div_" + i.toString() + "_f");
 49     if(![-1,])
 50         bDiv.setAttribute("cssText","width:98%;height:80%;float:left;");
 51     else
 52         bDiv.setAttribute("style","width:98%;height:80%;float:left;");    
 53     bDiv.appendChild(fDiv);    
 54     
 55     ajax.url.push( baseUrl + divObj.url[i] );
 56     ajax.divID.push( "div_" + i.toString() );
 57     
 58     ajaxExec.call(ajax,handleFunc);
 59     
 60 }
 61 
 62 
 63 var ajaxID = 0;
 64 function updateDiv()
 65 {
 66     //alert( ajax.divID );
 67     if (ajax.request.readyState == 4)
 68     {
 69         if(ajaxID===ajax.divID.length)
 70            return;
 71         if (ajax.request.status == 200)
 72         {
 73             document.getElementById(ajax.divID[ajaxID]).innerHTML = ajax.request.responseText;
 74             ajaxID = ajaxID + 1;
 75             ajax.request.open("GET", ajax.url[ajaxID], true);
 76             ajax.request.onreadystatechange = updateDiv;
 77             ajax.request.send(null);
 78             document.getElementById("test").innerHTML = document.getElementById("test").innerHTML + "----" + ajax.url[ajaxID];
 79         }
 80     }
 81     
 82     
 83     //ajaxQueue();
 84 }
 85 
 86 
 87 function handleFunc()
 88 {
 89     var ajaxObj = arguments[0];
 90     document.getElementById(ajaxObj.divID[ajaxObj.ajaxID]).innerHTML = ajaxObj.request.responseText;
 91 
}
 92 
 93 
 94 //控制事件按顺序执行,托管
 95 function ajaxExec()
 96 {
 97     var _this = this;
 98     var _handleFunc = arguments[0];
 99     _handleFunc.prototype.ajaxObj = this;
100     if (this.ajaxID===0)
101     {
102         this.request.open("GET"this.url[0], true);
103         this.request.onreadystatechange = function(){
104             _this.ajaxID = 1;
105             ajaxExec.call(_this,_handleFunc);
106         };
107         this.request.send(null);
108     }else{
109         if (this.ajaxIDLength!=this.url.length)
110             return;
111         if (this.request.readyState == 4)
112         {
113             if (this.ajaxID===this.url.length)
114                 return;
115             if (this.request.status == 200)
116             {
117                 _handleFunc.call(this);
118                 this.ajaxID = this.ajaxID + 1;
119                 this.request.open("GET"this.url[this.ajaxID], true);
120                 this.request.onreadystatechange = function(){
121                     ajaxExec.call(_this,_handleFunc);
122                 };
123                 this.request.send(null);
124             }
125         }
126         
127     }
128 }
129 
130 
131 function createAjax()
132 {
133     var request ;
134     try
135     {
136         request = new XMLHttpRequest();
137     }catch(err){
138         try
139         {
140             request = new ActiveXObject("Microsoft.XMLHTTP");
141         }catch(error){
142             request = new ActiveXObject("Msxml2.XMLHTTP");
143         }    
144     }
145     if(!request)
146     {
147         alert("createAjax Error!");
148     }else{
149         this.request = request;
150         this.ajaxID = 0;
151         this.ajaxIDLength = 0;
152         return this;    
153     }
154 }
155 
156 
157 
158 </script>


posted @ 2010-07-09 09:19  chy1000  阅读(240)  评论(0编辑  收藏  举报