JavaScript 函式呼叫
JavaScript function
中的程式碼將在“某事”呼叫它時執行。
呼叫 JavaScript 函式
函式中的程式碼在函式被定義時不會執行。
函式中的程式碼在函式被呼叫時執行。
使用“呼叫函式”而不是“呼叫函式”是很常見的。
同樣,也可以說“呼叫函式”、“啟動函式”或“執行函式”。
在本教程中,我們將使用“呼叫”,因為 JavaScript 函式可以在不被呼叫(call)的情況下被呼叫(invoke)。
將函式作為函式呼叫
上面的函式不屬於任何物件。但在 JavaScript 中,總有一個預設的全域性物件。
在 HTML 中,預設的全域性物件是 HTML 頁面本身,所以上面的函式“屬於”HTML 頁面。
在瀏覽器中,頁面物件是瀏覽器視窗。上面的函式會自動成為一個視窗函式。
注意
這是呼叫 JavaScript 函式的一種常見方式,但不是一種很好的做法。
全域性變數、方法或函式很容易在全域性物件中產生名稱衝突和錯誤。
myFunction() 和 window.myFunction() 是同一個函式
什麼是 this?
在 JavaScript 中,this
關鍵詞指向一個物件。
this
關鍵詞指向不同的物件,具體取決於它的使用方式。
在物件方法中,this 指向物件。 |
單獨使用時,this 指向全域性物件。 |
在函式中,this 指向全域性物件。 |
在嚴格模式下的函式中,this 是 undefined 。 |
在事件中,this 指向接收事件的元素。 |
諸如 call() 、apply() 和 bind() 等方法可以將 this 指向任何物件。 |
全域性物件
當一個函式在沒有所有者物件的情況下被呼叫時,this
的值將是全域性物件。
在網頁瀏覽器中,全域性物件是瀏覽器視窗。
此示例返回 window 物件作為 this
的值
將函式作為全域性函式呼叫,會導致 this 的值為全域性物件。
將 window 物件用作變數很容易導致程式崩潰。
將函式作為方法呼叫
在 JavaScript 中,您可以將函式定義為物件方法。
以下示例建立了一個物件(myObject),它有兩個屬性(firstName 和 lastName),以及一個方法(fullName)。
示例
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // 將返回 "John Doe"
自己動手試一試 »
fullName 方法是一個函式。該函式屬於該物件。myObject 是該函式的擁有者。
被稱為 this
的東西,是“擁有”JavaScript 程式碼的物件。在這種情況下,this
的值是 myObject。
試試看!將 fullName 方法更改為返回 this
的值
示例
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
// 這將返回 [object Object](所有者物件)
myObject.fullName();
自己動手試一試 »
將函式作為物件方法呼叫,會導致 this
的值為物件本身。
使用函式建構函式呼叫函式
如果函式呼叫前面帶有 new
關鍵字,則為建構函式呼叫。
看起來您建立了一個新函式,但由於 JavaScript 函式是物件,您實際上是建立了一個新物件。
示例
// 這是一個函式建構函式
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// 這會建立一個新物件
const myObj = new myFunction("John", "Doe");
// 這將返回 "John"
myObj.firstName;
自己動手試一試 »
建構函式呼叫會建立一個新物件。新物件繼承其建構函式的屬性和方法。
建構函式中的 this
關鍵字沒有值。
當函式被呼叫時,this
的值將是新建立的物件。