javascript function的隱藏功能apply/call

正常javascript呼叫function時,this變數是依賴function本身掛載的object,如:
buttonobj.click=function(){ alert(this.id);} // this=buttonobj
或者是指向符合存取條件之global object,如:
close(); // this=window
在這個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...);    // 分別傳入其他參數

沒有留言:

橫式廣告