javascript - JavaScript 中对象的 "internal slot"是什么?

标签 javascript object ecmascript-6

我试图在某一点上理解 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/

    相关文章:

    javascript - 我找不到 `displayName` 的匹配 TypeScript 类型作为 `type` 的 Prop

    javascript - 使用 Object.fromEntries() 深度克隆一个对象

    javascript - dc.js 某些数据值未显示

    javascript - 上传图片到cloudinary,不生成本地文件

    java - DTO 的行为应该放在哪里?对象与数据结构干净的代码

    javascript - 如何根据最新日期过滤/减少数据

    python Django : in view is it better to add properties to an object or make a dictionary of the data?

    ecmascript-6 - 如何在 promise 绑定(bind)中使用 ES6 箭头函数 (bluebird)

    javascript - es6 代码在 es5 中被破坏

    javascript - 使用javascript边框颜色消失