JavaScript对象在哪里存储它是否可扩展?

时间:2016-09-25 15:32:10

标签: javascript oop object immutability

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

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

从链接:

  

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

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

  

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