1. 程式人生 > >javascript函式基礎--函式的呼叫模式(4種)

javascript函式基礎--函式的呼叫模式(4種)

在Javascript中,公有4種函式呼叫模式:方法呼叫模式 、函式呼叫模式    、構造器呼叫模式、apply呼叫模式

這些模式在如何初始化this上存在差異

  1--方法呼叫模式   

  當一個函式被儲存為物件的一個屬性值 時,我們稱之為一個方法,this被繫結在物件上

 var obj={

    value: 0,

   increment : function(inc){

                      this.value+=typeof inc==='number'?inc:1;

                  }

  }   

obj.increment();  console.log(obj.value)   //1

obj.increment(2);  console.log(obj.value)   //3

2--函式呼叫模式       

   當一個函式不是一個物件的屬性時,它被當做函式來呼叫,his繫結到全域性上

  var sum=add(3,4);  //this繫結到全域性上

 var obj={

    value :1;

   doub:function(){

      var that=this;

      var helper=function(){ //this會繫結到全域性,通過that來改變this的指向

           that.vaule=that.value*2;

          };

      helper();

     }

}

obj.doub();

document.writeln(obj.value);//2

3--構造器呼叫模式   

       如果在一個函式前面加上new運算子來進行呼叫,那麼將建立一個隱藏的連結到該函式的prototype原型物件的新例項物件

同時this也會繫結到這個新例項物件上,注意new運算也會改變return的行為

 var  F=function(string){

      this.status=string;

    };

F.prototype.get=function(){

  return this.status;

  }

var f=new F('new object'); console.log(f.get()) //'new object'

  4--apply呼叫模式

javascript是函式式的面向物件程式語言,函式可以擁有方法,apply就是函式的一個基本方法,使用這個方法可以呼叫函式

var array=[5,4];

var add=function(){

  var i,sum=0;

 for(i=0;i<arguments.length;i+=1){

   sum+=arguments[i];

   }

 return sum;

}

var sum=add.apply({},array);//9

 

 

 var  F=function(string){

      this.status=string;

    };

F.prototype.get=function(){

  return this.status;

  }

var obj={

  status:'obj'

};

var status=F.prototype.get.apply(obj); //'obj'