正常javascript呼叫function時,this變數是依賴function本身掛載的object,如:
buttonobj.click=function(){ alert(this.id);} // this=buttonobj
或者是指向符合存取條件之global object,如:
在這個this變數這麼玄的情況下,有些動態程式設計的便利性,需要去竄改function的this值時,javascript內建提供兩個隱藏method apply/call,來達成變更this的內容,而不需要在function內自行判斷.
利用apply/call變更function的this值
button1obj.click=showMyId; // showMyId的this=button1obj
function showMyId(){
alert(this.id);
}
button2obj.click=function(){
// showMyId的this=button2obj
showMyId.apply(this); //自行指定showMyId function的this值
}
div.click=function(){
// showMyId的this=button2obj
showMyId.call(button2obj);
//自行指定showMyId function的this值
}
showMyId.apply({'id':'NotExistObjId'}); // showMyId的this為自訂array.
apply與call的差異
apply(thisobj,argsArray);
// 用陣列方式傳入其他參數
call(thisobj,arg0,arg1...);
// 分別傳入其他參數
沒有留言:
張貼留言