В этом посте я читал, что у объектов тоже есть атрибуты, такие как prototype
, class
и extensible
.
Они обычно не называются "атрибутами", но внутренние слоты .Обычно они обозначаются двойными скобками, чтобы отличать их от обычных свойств, то есть [[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 ()?
Нет, [[растяжимый]] внутренний слот - это то, к чему isExtensible()
обращается, и что Object.preventExtensions()
может установить.