簡體   English   中英

Javascript 函數賦值后未定義

[英]Javascript this undefined after function assignment

因此,我正在閱讀面向 Web 開發人員的專業 Javascript 一書,並遇到了以下示例。

var object = {
  name: "my Object",
  getName: function() {
    return this.name;
  }
}

然后作者展示了以下結果:

object.getName(); // "my Object"
(object.getName)(); // "my Object"
(object.getName = object.getName)() // "undefined"

我理解第一個案例,但對案例 2 和案例 3 有以下問題。

案例 2:在 object.getName 周圍加上括號有什么作用? 到目前為止我只知道你可以在匿名函數周圍加上括號來立即調用它(立即調用函數表達式)。 但是如果函數不是匿名的呢?

案例3:為什么this不是分配后保持?

這里的問題確實與this變化沒有任何關系。 第三種情況的不同之處在於用作函數引用的值失去了與上下文對象的關系。

當通過評估對象屬性引用獲得函數引用,然后調用該函數時,JavaScript 確保將函數中的this設置為所涉及的對象。 這就是前兩種情況的工作方式。

第三種情況,函數引用原本是從對象中獲取的,但是整體的值

(object.getName = object.getName)

是那個=賦值的值。 正因為如此,與對象的關系被打破了,你所擁有的只是對函數的引用。 因此調用不會設置this 就好像你寫過:

var something = object.getName;
something();

這也不會this設置為object 僅當函數引用直接來自. [ ]操作將所涉及的對象在調用中作為this結束。 情況 2 中的括號是一種特殊情況; 在 JavaScript 中,括號不計算任何值; 它們會影響解析表達式的方式,但不會主動執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM