JavaScript呼叫時除了宣告時定義的形參外,每個函數接受兩個附加參數:this 和arguments,this在物件導向程式設計中非常重要,它取決於呼叫模式。
JavaScript有四種呼叫模式,方法呼叫模式,函數呼叫模式,建構器呼叫模式和apply呼叫模式。這些模式在初始化關鍵參數this上存在差異。
方法呼叫模式:當一個函數被儲存為物件的屬性時,我們稱它為一個方法,當一個方法被呼叫時,this被綁定到該物件上。如果呼叫表達式包含一個屬性取表達式(即一個.點表達式或[script]下標表達式),那麼它被當作一個方法呼叫。
var myObject = {
value: 00; 🎜>increment: function(inc){
this.value = typeof inc === 'number' ? inc : 1;
}
};
myObject.increment();
document.writeln(myObject.value);//1
myObject.increment(2);
document.writeln(myObject.value);//2
方法可以使用this去存取對象,所以它能從對象取值或修改對象。 this的綁定發生在呼叫的時候。這個超級遲綁定使得函數可以對this高度重複使用。透過this可以取得他們所屬的上下文方法稱為公共方法。
函數呼叫模式:當一個函數並非一個物件的屬性時,那麼它被當做一個函數來呼叫var sum = add(3, 4);//sum值為7
當函數以此模式呼叫時,this被綁定到全域物件。
構造器呼叫模式:JavaScript是一門基於原型繼承的語言。這意味著可以直接從其他物件繼承屬性。該語言是無類別的。
如果在函數前面帶上new來調用,那麼將創建一個隱藏連接到該函數的prototype成員的新對象,同時this將會被綁定到那個新對像上。
Apply呼叫模式:因為JavaScript是一門函數式的物件導向程式語言,所以函數可以擁有方法。
apply方法讓哦我們建立一個參數數組並用其去呼叫函數。它也允許我們選擇this的值。
apply方法接受兩個參數,第一個將被綁定給this的值,第二個就是一個參數數組。