JavaScript中的物件的“內部插槽”是什麼?
.但這一節對我來說非常不清楚,特別是這句話:
Internal slots correspond to internal state that is associated with objects and used by various ECMAScript specification algorithms.
(它是否使用正確的語法?)任何人都可以用英文解釋這個概念?
到目前為止我能理解什麼
>內部插槽不是屬性
>在建立物件期間使用內部插槽,但不會新增到物件本身
>內部插槽是或具有值,最初未定義
概要
內部插槽/方法是規範用於定義所需行為的偽屬性/方法. (“抽象操作”是規範的相關機制).插槽表示狀態(值),方法描述演算法(行為).它們可能或可能不對應於引擎使用的物件的屬性,但除了公開API的某些部分外,它們不可用於使用者程式碼.引擎使用的實際實現可能與內部方法所描述的非常不同,但是要符合規定,它們必須產生與內部方法一致的行為或結果.
例子
[[StringData]]內部插槽
String的行為,例如新的String(“whatever”)以包含代表該值的[[StringData]]內部插槽的術語進行了描述(無論在這種情況下).內部插槽不能直接訪問使用者程式碼,但String.prototype.toString()(例如(new String(“whatever”)).toString())根據thisStringValue()抽象操作定義,即描述了返回[[StringData]]的值.所以換句話說,String.prototype.toString()是公開的API,本質上是一個暴露[[StringData]]的getter.
[[OwnPropertyKeys]]內部方法
Object.keys()
的行為描述為包括呼叫[[OwnPropertyKeys]]內部方法.注意,諸如普通物件(例如
Object
)和外來物體(例如
String
)的不同型別的物件可以具有[[OwnPropertyKeys]]的不同定義.當[[OwnPropertyKeys]]在規範中被“呼叫”時,它指的是適用型別的定義.還有一些invariant
特性適用於其對任何物件型別的定義.
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/33075262/what-is-an-internal-slot-of-an-object-in-javascript