解釋「this」的值
重要性:3
在以下程式碼中,我們打算連續呼叫 obj.go()
方法 4 次。
但呼叫 (1)
和 (2)
與 (3)
和 (4)
的運作方式不同。為什麼?
let obj, method;
obj = {
go: function() { alert(this); }
};
obj.go(); // (1) [object Object]
(obj.go)(); // (2) [object Object]
(method = obj.go)(); // (3) undefined
(obj.go || obj.stop)(); // (4) undefined
以下是說明。
-
這是一個常規物件方法呼叫。
-
相同,括號不會變更運算順序,無論如何,點才是第一個。
-
這裡我們有一個更複雜的呼叫
(expression)()
。呼叫運作方式就像將其拆分成兩行f = obj.go; // calculate the expression f(); // call what we have
這裡
f()
以函式執行,沒有this
。 -
與
(3)
相似,在括號()
的左側,我們有一個表達式。
要說明 (3)
和 (4)
的行為,我們需要回想屬性存取器(點或方括號)會傳回參考類型的值。
除了方法呼叫(例如指定 =
或 ||
)以外,對其執行的任何運算都會將其轉換為一般值,而不會傳遞允許設定 this
的資訊。