【问题标题】:Where does a JavaScript object store whether it's extensible or not?JavaScript 对象在哪里存储它是否可扩展?
【发布时间】:2016-09-25 15:32:10
【问题描述】:

如问题中所述,在 JavaScript 中,无论是否可扩展,对象都存储在哪里?

Object.isExtensible()可以访问属性值,但是这些信息存储在哪里?

谢谢!

【问题讨论】:

    标签: javascript oop object immutability


    【解决方案1】:

    在它的[[Extensible]] internal slot 中,不能从您的代码直接访问(当然,可以通过Object.isExtensibleReflect.isExtensible 访问)。

    来自链接:

    每个普通对象都有一个布尔值 [[Extensible]] 内部槽,用于控制是否可以向对象添加属性。如果 [[Extensible]] 内部插槽的值为 false,则可能不会向对象添加其他属性。此外,如果 [[Extensible]] 为 false,则对象的 [[Prototype]] 内部槽的值可能不会被修改。一旦对象的 [[Extensible]] 内部槽的值已设置为 false,它可能不会随后更改为 true

    内部槽有点像属性,但不是继承的,也不能(直接)从程序代码访问。来自Object Internal Methods and Internal Slots

    内部槽对应于与对象关联并被各种 ECMAScript 规范算法使用的内部状态。内部插槽不是对象属性,它们不会被继承。根据特定的内部槽规范,这种状态可能由任何 ECMAScript 语言类型的值或特定的 ECMAScript 规范类型值组成。除非另有明确规定,否则内部插槽是作为创建对象过程的一部分分配的,并且可能不会动态添加到对象中。除非另有说明,否则内部槽的初始值是未定义的值。本规范中的各种算法创建具有内部槽的对象。但是,ECMAScript 语言没有提供将内部槽与对象关联的直接方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多