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'