書上有說4中調用方式:javascript
方法調用模式java
函數調用模式瀏覽器
構造器調用模式app
apply調用模式函數
下面咱們來看看一些實例更好理解。this
1:方法調用模式。spa
請注意this此時指向myobject。prototype
/*方法調用模式*/
var myobject={
value:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()指針
2:函數調用模式orm
請注意this此時指向window
/*函數調用模式*/
var add=function(a,b){
alert(this)//this被綁頂到window
return a+b;
}
var sum=add(3,4);
alert(sum)
3:構造器調用模式
javascript語言精粹一書建議摒棄這中方式。由於有更好的方式。這裏先不介紹。下次發表博文的時候貼出來。
會在這裏加一個鏈接。
/*構造器調用模式 摒棄*/
var quo=function(string){
this.status=string;
}
quo.prototype.get_status=function(){
return this.status;
}
var qq=new quo("aaa");
alert(qq.get_status());
4:apply調用模式
==咱們能夠來看一個更有用的apply實例。看最下面的代碼。
/*apply*/
//注意使用了上面的sum函數
//與myobject
//這中調用方式的優勢在於能夠指向this指向的對象。
//apply的第一個參數就是this指針要指向的對象
var arr=[10,20];
var sum=add.apply(myobject,arr);
alert(sum);
看這個apply真正應用。bind這是一個綁定時間的函數
var bind=function(object,type,fn){ if(object.attachEvent){//IE瀏覽器 object.attachEvent("on"+type,(function(){ return function(event){ window.event.cancelBubble=true;//中止時間冒泡 object.attachEvent=[fn.apply(object)];//----這裏我要講的是這裏 //在IE裏用attachEvent添加一個時間綁定之後。 //this的指向不是到object對象自己因此。咱們綁定的function裏的this.id是沒法正常工做的。 //可是若是咱們用fn.apply(object) //這裏能夠看出咱們是把apply的第一個對象也就是this的指向變動給了object因此this.id就變成了 //object.id 能夠正常工做了。 } })(object),false); }else if(object.addEventListener){//其餘瀏覽器 object.addEventListener(type,function(event){ event.stopPropagation();//中止時間冒泡 fn.apply(this) }); } } bind(document.getElementById("aaa"),"click",function(){alert(this.id)});