我现在copy一段代码,大家帮我看下这里的call方法的作用是什么啊?
js代码如下:
var net=new Object();
net.AjaxRequest=function(url,onload,onerror,method,params){
  this.req=null;
  this.onload=onload;
  this.onerror=(onerror) ? onerror : this.defaultError;
  this.loadDate(url,method,params);
}
net.AjaxRequest.prototype.loadDate=function(url,method,params){
  if (!method){
    method="GET";
  }
  if (window.XMLHttpRequest){
    this.req=new XMLHttpRequest();
  } else if (window.ActiveXObject){
try{
  this.req=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
this.req=new ActiveXObject("Microsoft.XMLHTTP");           }catch(e){}
}
  }
  if (this.req){
    try{
      var loader=this;
      this.req.onreadystatechange=function(){
        net.AjaxRequest.onReadyState.call(loader);           问题1:这里的call是什么意思啊????        
      }
      this.req.open(method,url,true);
  if(method=="POST"){
this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
  }
      this.req.send(params);
    }catch (err){
      this.onerror.call(this);                           问题2:这里的call是什么意思啊?
    }
  }
}net.AjaxRequest.onReadyState=function(){
  var req=this.req;
  var ready=req.readyState;
  if (ready==4){
    if (req.status==200 ){
      this.onload.call(this);                           问题3:这里的call方法什么意思?
    }else{                        
      this.onerror.call(this);                           问题4:这里的call方法什么意思?
    }
  }
}net.AjaxRequest.prototype.defaultError=function(){
  alert("错误数据\n\n回调状态:"+this.req.readyState+"\n状态: "+this.req.status);
}

解决方案 »

  1.   

    .call的用法相当于:李四会伐木,张三不会,但是张三想伐木,怎么办?李四将伐木教给张三,张三伐木李四.伐木.call(张三)
      

  2.   

    大概的理论意思是把一个对象绑定到另一个对象上运行,参数一至!大道理不多说,直接看例子:
    <script>
    function myFun(p1, p2, p3) 
    {
    this.para1 = p1;
    this.para2 = p2;
    this.para3 = p3;
    }var myObject = new Object(); alert(myObject.para1) //显示undefinedmyFun.call(myObject,3,5,7); 
    /*执行的时候,myFun方法中的this全部用myObject对象代替,所以在这个例子中,执行myFun方法和直接写下面的语句效果是一样的:
    myObject.para1 = 3;
    myObject.para2 = 5;
    myObject.para3 = 7;
    */
    alert(myObject.para1) //显示3
    alert(myObject.para2) //显示5

    </script>
      

  3.   

    if (req.status==200 ){
      this.onload.call(this); 问题3:这里的call方法什么意思?//
    注意这里是net.AjaxRequest.onReadyState=function()这个环境下,也有了onload方法
      }else{  
      this.onerror.call(this); 问题4:这里的call方法什么意思?//这个环境下也有了onerror方法
      }
    回应了顶上的这2句:
    this.onload=onload;
    his.onerror=(onerror) ? onerror : this.defaultError;
      

  4.   

    在楼主函数里,我觉得CALL的用途就是实现了继承的作用,让JS也可以像OOP一样。当然还有像PROTOTYPE也可以达到继承的效果!
      

  5.   

    李四教会了张三,李四还会,但是在CALL里一个对象有了属性方法后。另外一个对象不能用了。跟这个不太一样的,比喻上还有一定区别。
      

  6.   


    <script type="text/javascript">
    var lisi = {
    name:'李四',
    famu:function() {
        alert(this.name+'在伐木')
    }
    }var zhangsan = {
    name:'张三'
    }lisi.famu.call(zhangsan);
    lisi.famu();
    // 下面错误,call相当于临时赋予,并不是真正具有
    zhangsan.famu();
    </script>