首頁 > web前端 > js教程 > 主體

為什麼建構子有時會傳回非 this 值?

Susan Sarandon
發布: 2024-11-11 12:53:02
原創
1021 人瀏覽過

Why Does a Constructor Function Sometimes Return a Non-this Value?

建構函式中非 this 傳回的奇怪情況

當使用 new 關鍵字呼叫建構函式時,通常假設函式會傳回新建立的目的。但是,在特定情況下,可以傳回非 this 值。

在 JavaScript 中,控制此行為的確切條件在 ECMAScript 規範的函數物件的內部 [[Construct]] 屬性中定義。呼叫時,此屬性執行下列步驟:

  1. 建立一個新物件。
  2. 將其 [[Class]] 屬性設為「物件」。
  3. 擷取來自建構函數的原型屬性的值。
    4-5。將新物件的 [[Prototype]] 屬性設為原型值(如果它是物件)或原始 Object 原型物件。
  4. 呼叫建構子的 [[Call]] 屬性,使用新物件如下所示,傳遞建構函式參數作為其參數。
    7-8。 關鍵步驟: 如果 Type(Result(6)) 不是對象,則傳回新對象,否則傳回 Result(1)(即步驟 1 中建立的新物件)。

因此,建構子的回傳值會決定是傳回新建立的物件還是not:

  • 如果傳回值是非物件原語 ,則傳回新物件。
  • 如果傳回值是任意object,這將被傳回。

測試新建立的物件是否與先前建立的物件確實不同一個由建構函式傳回,可以檢查: (new Foo() instanceof Foo) === false.

以上是為什麼建構子有時會傳回非 this 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板