[英]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.