Запись Частной Среды (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