ECMAScript | Операции Области

Области в ECMAScript имеют следующие операции:

CreateRealm ( )

Абстрактная операция CreateRealm (Создать Область) не принимает аргументов. При вызове он выполняет следующие шаги:

1. Пусть realmRec будет новой Записью Области.
2. Выполните CreateIntrinsics(realmRec).
3. Установите для realmRec.[[GlobalObject]] значение undefined.
4. Установите для realmRec.[[GlobalEnv]] значение undefined.
5. Установите realmRec.[[TemplateMap]] в новый пустой список.
6. Верните realmRec.

 

CreateIntrinsics ( realmRec )

Абстрактная операция CreateIntrinsics (Создать внутренние) принимает аргумент realmRec. При вызове он выполняет следующие шаги:

1. Пусть intrinsics будет новой Записью.
2. Установите для realmRec.[[Intrinsics]] значение intrinsics.
3. Задайте для полей intrinsics значения, перечисленные в таблице 8. Имена полей - это имена, перечисленные в первом столбце таблицы.

   Значение каждого поля - это новое значение объекта, полностью и рекурсивно заполненное значениями свойств, как определено спецификацией каждого объекта в разделах с 19 по 28.

   Все значения свойств объекта являются значениями вновь созданных объектов. Все значения, которые являются встроенными объектами функций, создаются путем выполнения CreateBuiltinFunction(steps, length, name, slots, realmRec, prototype), где шаги steps - это определение этой функции, предоставленное данной спецификацией, имя name - это начальное значение свойства name функции. , длина length - начальное значение свойства length функции, слоты slots - это список имен, если таковые имеются, указанных внутренних слотов функции, а прототип prototype - это указанное значение внутреннего слота функции [[Prototype]].

   Создание встроенных функций и их свойств должно быть упорядочено, чтобы избежать каких-либо зависимостей от объектов, которые еще не были созданы.
4. Выполните AddRestrictedFunctionProperties(intrinsics.[[%Function.prototype%]], realmRec).
5. Вернуть intrinsics.

 

SetRealmGlobalObject ( realmRec, globalObj, thisValue )

Абстрактная операция SetRealmGlobalObject (Установить область глобального объекта) принимает аргументы realmRec, globalObj и thisValue. При вызове он выполняет следующие шаги:

1. Если globalObj является undefined (не определен), то
   a. Пусть intrinsics будет realmRec.[[Intrinsics]].
   b. Установите globalObj на ! OrdinaryObjectCreate(intrinsics.[[%Object.prototype%]])
2. Утверждено: Тип(globalObj) является Object.
3. Если thisValue является undefined (не определен), установите thisValue в globalObj.
4. Установите для realmRec.[[GlobalObject]] значение globalObj.
5. Пусть newGlobalEnv будет NewGlobalEnvironment(globalObj, thisValue).
6. Установите для realmRec.[[GlobalEnv]] значение newGlobalEnv.
7. Верните realmRec.

 

SetDefaultGlobalBindings ( realmRec )

Абстрактная операция SetDefaultGlobalBindings (Установить глобальные привязки по умолчанию) принимает аргумент realmRec. При вызове он выполняет следующие шаги:

1. Пусть global будет realmRec.[[GlobalObject]].
2. Для каждого свойства глобального объекта, указанного в разделе 19, выполните
   a. Пусть name будет строковым значением имени свойства.
   b. Пусть desc будет полностью заполненным дескриптором свойства данных для свойства, содержащим указанные атрибуты для свойства. Для свойств, перечисленных в 19.2, 19.3 или 19.4, значением атрибута [[Value]] является соответствующий внутренний объект из realmRec.
   c. Выполнять ? DefinePropertyOrThrow(global, name, desc).
3. Вернуть global.

Информационные ссылки

ECMAScript | Области

Стандарт ECMAScript — Раздел «9.2 Realms» — https://tc39.es/ecma262/#sec-code-realms

Поделись записью