ECMAScript | Записи Частной Среды — efim360.ru

ECMAScript | Записи Частной Среды

Запись Частной Среды (PrivateEnvironment Record) — это механизм спецификации, используемый для отслеживания Частных Имен на основе лексической вложенной структуры ClassDeclaration'ов и ClassExpression'ов в коде ECMAScript. Они похожи на Environment Records, но отличаются от них. Каждая Запись Частной Среды связана с ClassDeclaration или ClassExpression. Каждый раз, когда оценивается такой класс, создаётся новая Запись Частной Среды для записи Частных Имён, объявленных этим классом.

Каждая Запись Частной Среды имеет поля, определенные в таблице 27.

Field Name (Имя Поля) Value Type (Тип Значения) Meaning (Смысл)
[[OuterPrivateEnvironment]] Запись Частной Среды или null Запись Частной Среды ближайшего содержащего класса. null, если класс, с которым связана эта Запись Частной Среды, не содержится ни в каком другом классе.
[[Names]] Список из Частных Имён Частные Имена, объявленные этим классом.

Таблица 27: Поля записи PrivateEnvironment

9.2.1 Операции с записью PrivateEnvironment

В этой спецификации используются следующие абстрактные операции для работы с Записями PrivateEnvironment:

9.2.1.1 NewPrivateEnvironment ( outerPrivEnv )

Абстрактная операция NewPrivateEnvironment (Новая Частная Среда) принимает аргумент outerPrivEnv (Запись PrivateEnvironment или null). При вызове она выполняет следующие действия:

1. Пусть имена names будут новым пустым Списком.
2. Верните Запись PrivateEnvironment { [[OuterPrivateEnvironment]]: outerPrivEnv, [[Names]]: names }.

 

9.2.1.2 ResolvePrivateIdentifier ( privEnv, identifier )

Абстрактная операция ResolvePrivateIdentifier (Разрешить Частный Идентификатор) принимает аргументы privEnv (Запись PrivateEnvironment) и identifier (Строка). При вызове она выполняет следующие действия:

1. Пусть names будет privEnv.[[Names]].
2. Если names содержать Частное Имя чей слот [[Description]] является identifier, тогда
  a. Пусть name будет этим Частным Именем.
  b. Вернуть name.
3. Иначе,
  a. Пусть outerPrivEnv будет privEnv.[[OuterPrivateEnvironment]].
  b. Утверждено: outerPrivEnv не является null.
  c. Вернуть ResolvePrivateIdentifier(outerPrivEnv, identifier).

 

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

ECMAScript | Исполняемый Код и Контексты Выполнения

Стандарт ECMAScript - Раздел "9.2 PrivateEnvironment Records" - https://tc39.es/ecma262/#sec-privateenvironment-records

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