簡體   English   中英

什么是JavaScript中對象的“內部插槽”?

[英]What is an “internal slot” of an object in JavaScript?

我試圖在一點上理解ECMAScript 2015規范: 對象的內部插槽 但這部分對我來說顯得很不清楚,特別是這句話:

內部插槽對應於與對象關聯並由各種ECMAScript規范算法使用的內部狀態。

(它使用正確的語法嗎?)有人能用英語解釋這個概念嗎?


到目前為止我能理解的是:

  • 內部插槽不是屬性
  • 內部插槽在創建對象期間使用,但不會添加到對象本身
  • 內部插槽是或​​具有 ,最初是undefined

摘要

內部插槽/方法是偽屬性/方法,規范用它來定義所需的行為。 (“抽象操作”是規范的相關機制。)插槽表示狀態(值),方法描述算法(行為)。 它們可能或可能不對應於引擎使用的對象的屬性,但它們不可用於用戶代碼,除非公共API的某些部分公開。 引擎使用的實際實現可能與內部方法草擬的內容大不相同,但為了符合要求,它們必須產生與內部方法一致的行為或結果。

例子

[[StringData]]內部插槽

String的行為,例如new String("whatever") ,用包含表示值的[[StringData]]內部槽的術語來描述(在這種情況下是whatever )。 用戶代碼不能直接訪問內部槽,但String.prototype.toString() (例如(new String("whatever")).toString() )是根據thisStringValue()抽象操作定義的,在返回[[StringData]]的值方面進行了描述。 換句話說, String.prototype.toString()是公共API,它本質上是一個暴露[[StringData]]的getter。

[[OwnPropertyKeys]]內部方法

Object.keys()的行為用包括調用[[OwnPropertyKeys]]內部方法的術語來描述。 請注意,不同類型的對象(例如普通對象(例如Object ))和外來對象(例如String )可能具有[[OwnPropertyKeys]]不同定義。 在規范中“調用” [[OwnPropertyKeys]] ,它指的是適用類型的定義。 還有一些不變特征適用於任何對象類型的定義。

它只是一種技巧,用於精確描述物體應如何表現。

它們不是對象的真實成員,即使在某些實現中,您也不允許使用可移植代碼訪問它們。

換句話說,它是一種編寫規范的方法,該規范允許使用命令式代碼描述行為,這種代碼正式更精確,只是使用對行為應該是什么的羅嗦的“自然語言”描述。

暫無
暫無

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

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