2016-09-25 2 views
1

Как описано в вопросе, в JavaScript, где хранится объект, является ли он расширяемым или нет?Где хранится объект JavaScript, является ли он расширяемым или нет?

Доступ к стоимости недвижимости можно получить по номеру Object.isExtensible(), но где хранится эта информация?

Спасибо!

ответ

3

В своем [[Extensible]] internal slot, который напрямую не доступен из вашего кода (но, конечно, доступен через Object.isExtensible и Reflect.isExtensible).

Из ссылке:

Каждый объект имеет обычный булевозначном [[Extensible]] внутренний слот, который контролирует, может ли или нет быть добавлены свойства к объекту. Если значение внутреннего слота [[Расширяемый]] равно false, дополнительные объекты не могут быть добавлены к объекту. Кроме того, если [[Расширяемый]] равен false, значение внутреннего слота [[Prototype]] объекта не может быть изменено. После того, как значение внутреннего слота [[Extensible]] объекта было установлено на false, оно не может быть впоследствии изменено на true.

Внутренние слоты немного напоминают свойства, но не наследуются и не доступны (напрямую) из кода программы. От Object Internal Methods and Internal Slots:

Внутренние слоты соответствуют внутреннему состоянию, связанному с объектами и используемому различными алгоритмами спецификации ECMAScript. Внутренние слоты не являются объектными свойствами, и они не наследуются. В зависимости от конкретной спецификации внутреннего слота такое состояние может состоять из значений любого типа языка ECMAScript или конкретных значений типа спецификации ECMAScript. Если явно не указано иное, внутренние слоты выделяются как часть процесса создания объекта и не могут динамически добавляться к объекту. Если не указано иное, начальное значение внутреннего слота является неопределенным значением. Различные алгоритмы в этой спецификации создают объекты с внутренними слотами. Однако язык ECMAScript не дает прямого способа связывать внутренние слоты с объектом.

Смежные вопросы