Javascript对象属性?

Ash*_*ana 1 javascript prototype ecmascript-6

我知道,所有的对象属性有一个名字,并且有类似的属性value,configurable,enumerablewritable.但是,在这个职位,我读了对象也有类似的属性prototype,classextensible.

我知道该prototype属性用于指向父对象.但我不明白的是什么class属性?有这样的属性吗?并不是extensible一个对象的方法isExtensible()

Ber*_*rgi 6

在这篇文章中,我读了对象也有类似的属性prototype,classextensible.

它们通常不被称为"属性",而是内部插槽.通常它们用双括号表示,以区别于正常属性,即[[prototype]],[[class]]和[[extensible]].

什么是[[class]]属性?有这样的属性吗?

不再是ES6了.[[class]]内部插槽包含有关该对象的内置类型(例如,Array,RegExp,内置包装器)的信息.Object.prototype.toString在对象上使用该方法时显示.(看看为什么Object.prototype.toString.call(foo)可以检测foo的类型?或者为什么`Object.prototype.toString`总是返回`[object*]`?以获取更多细节 - 这也是最好的方法在Array.isArray可用之前检测对象是否是数组.

从ES6开始,不再有这样的内部插槽,现在Object.prototype.toString依赖于Symbol.toStringTag机制.

并且不能像isExtensible()一样扩展对象的方法吗?

不,[[extensible]]内部插槽是isExtensible()访问的东西,Object.preventExtensions()可以设置.