Экзотический объект неизменяемого прототипа — это экзотический объект, у которого есть внутренний слот [[Prototype]], который не изменится после инициализации.
Объект является «экзотическим объектом неизменяемого прототипа» (immutable prototype exotic object), если его внутренний метод [[SetPrototypeOf]] использует следующую реализацию. (Его другие важные внутренние методы могут использовать любую реализацию, в зависимости от конкретного рассматриваемого неизменяемого экзотического объекта-прототипа.)
В отличие от других экзотических объектов, для неизменяемых экзотических объектов-прототипов не предусмотрена специальная операция создания абстрактных объектов. Это связано с тем, что они используются только %Object.prototype% и средами хоста, а в средах хоста соответствующие объекты потенциально экзотичны в других отношениях и, следовательно, требуют отдельной специальной операции создания.
- 10.4.7.1 [[SetPrototypeOf]] ( V )
- 10.4.7.2 SetImmutablePrototype ( O, V )
[[SetPrototypeOf]] ( V )
Внутренний метод [[SetPrototypeOf]] неизменяемого прототипа экзотического объекта O принимает аргумент V (объект или null). При вызове он выполняет следующие шаги:
1. Вернуть ? SetImmutablePrototype(O, V).
SetImmutablePrototype ( O, V )
Абстрактная операция SetImmutablePrototype (Установить неизменяемый прототип) принимает аргументы O и V. При вызове она выполняет следующие шаги:
1. Утверждено: Либо Тип(V) - Объект, либо Тип(V) - Null. 2. Пусть current будет ? О.[[GetPrototypeOf]](). 3. Если SameValue(V, current) является true истина, вернуть true. 4. Вернуть false.
Информационные ссылки
Предыдущий раздел — Экзотические объекты Пространства имён Модуля
Стандарт ECMAScript — Раздел «Immutable Prototype Exotic Objects» — https://tc39.es/ecma262/#sec-immutable-prototype-exotic-objects