Области в ECMAScript имеют следующие операции:
- CreateRealm ( )
- CreateIntrinsics ( realmRec )
- SetRealmGlobalObject ( realmRec, globalObj, thisValue )
- SetDefaultGlobalBindings ( realmRec )
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 — Раздел «9.2 Realms» — https://tc39.es/ecma262/#sec-code-realms