我试图在某一点上理解 ECMAScript 2015 规范:Internal Slots of Objects .但是这部分对我来说似乎很不清楚,尤其是这句话:
Internal slots correspond to internal state that is associated with objects and used by various ECMAScript specification algorithms.
(它使用正确的语法吗?)有人可以用英语解释这个概念吗?
到目前为止我能理解的:
undefined
最佳答案
概括
内部槽/方法是规范用来定义所需行为的伪属性/方法。 (“抽象操作”是规范的相关机制。)槽表示状态(值),方法描述算法(行为)。它们可能对应于引擎使用的对象的属性,也可能不对应,但它们对用户代码不可用,除非由公共(public) API 的某些部分公开。引擎使用的实际实现可能与内部方法的草图有很大不同,但要符合要求,它们必须产生与内部方法一致的行为或结果。
例子[[StringData]]
内部插槽String
的行为,例如new String("whatever")
, 用包含 [[StringData]]
的术语进行描述表示值的内部槽(在本例中为 whatever
)。用户代码不能直接访问内部插槽,但 String.prototype.toString()
(例如 (new String("whatever")).toString()
)根据 thisStringValue()
定义抽象操作,用返回[[StringData]]
的值来描述.换句话说,String.prototype.toString()
是公共(public) API,本质上是一个公开 [[StringData]]
的 getter .[[OwnPropertyKeys]]
内部方法
Object.keys()
的行为描述的术语包括调用 [[OwnPropertyKeys]]
内部方法。请注意,不同种类的对象,例如普通对象(例如 Object
)和奇异对象(例如 String
)可能对 [[OwnPropertyKeys]]
有不同的定义。 .当[[OwnPropertyKeys]]
在规范中被“称为”,指的是适用类型的定义。还有一些invariant适用于任何对象类型的定义的特征。
关于javascript - JavaScript 中对象的 "internal slot"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33075262/