ページ表示設定

28 リフレクション

28.1 Reflect オブジェクト

Reflect オブジェクトは:

28.1.1 Reflect.apply ( target, thisArg, args )

この関数は呼び出されたとき、次の手順を実行します。

  1. IsCallable(target) が false である場合、TypeError 例外をスローする。
  2. argList を ? CreateListFromArrayLike(args) とする。
  3. PrepareForTailCall() を実行する。
  4. ? Call(target, thisArg, argList) を返す。

28.1.2 Reflect.construct ( target, args [ , newTarget ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. IsConstructor(target) が false である場合、TypeError 例外をスローする。
  2. newTarget が存在しない場合、newTarget を target に設定する。
  3. そうでなく、IsConstructor(newTarget) が false である場合、TypeError 例外をスローする。
  4. argList を ? CreateListFromArrayLike(args) とする。
  5. ? Construct(target, argList, newTarget) を返す。

28.1.3 Reflect.defineProperty ( target, key, attrs )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. propertyDesc を ? ToPropertyDescriptor(attrs) とする。
  4. ? target.[[DefineOwnProperty]](propertyKey, propertyDesc) を返す。

28.1.4 Reflect.deleteProperty ( target, key )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. ? target.[[Delete]](propertyKey) を返す。

28.1.5 Reflect.get ( target, key [ , receiver ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. receiver が存在しない場合、
    1. receiver を target に設定する。
  4. ? target.[[Get]](propertyKey, receiver) を返す。

28.1.6 Reflect.getOwnPropertyDescriptor ( target, key )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. propertyDesc を ? target.[[GetOwnProperty]](propertyKey) とする。
  4. FromPropertyDescriptor(propertyDesc) を返す。

28.1.7 Reflect.getPrototypeOf ( target )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. ? target.[[GetPrototypeOf]]() を返す。

28.1.8 Reflect.has ( target, key )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. ? target.[[HasProperty]](propertyKey) を返す。

28.1.9 Reflect.isExtensible ( target )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. ? target.[[IsExtensible]]() を返す。

28.1.10 Reflect.ownKeys ( target )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. keys を ? target.[[OwnPropertyKeys]]() とする。
  3. CreateArrayFromList(keys) を返す。

28.1.11 Reflect.preventExtensions ( target )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. ? target.[[PreventExtensions]]() を返す。

28.1.12 Reflect.set ( target, key, value [ , receiver ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. receiver が存在しない場合、
    1. receiver を target に設定する。
  4. ? target.[[Set]](propertyKey, value, receiver) を返す。

28.1.13 Reflect.setPrototypeOf ( target, proto )

この関数は呼び出されたとき、次の手順を実行します。

  1. target が Object でない場合、TypeError 例外をスローする。
  2. proto が Object でなく、かつ proto が null でない場合、TypeError 例外をスローする。
  3. ? target.[[SetPrototypeOf]](proto) を返す。

28.1.14 Reflect [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティの初期値は String 値 "Reflect" です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持ちます。

28.2 Proxy オブジェクト

28.2.1 Proxy コンストラクター

Proxy コンストラクターは:

  • %Proxy% です。
  • グローバルオブジェクトの "Proxy" プロパティの初期値です。
  • コンストラクターとして呼び出されたとき、新しい Proxy オブジェクトを作成して初期化します。
  • 関数として呼び出されることを意図しておらず、そのように呼び出された場合は例外をスローします。

28.2.1.1 Proxy ( target, handler )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、TypeError 例外をスローする。
  2. ? ProxyCreate(target, handler) を返す。

28.2.2 Proxy コンストラクターのプロパティ

Proxy コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • Proxy オブジェクトは初期化を必要とする [[Prototype]] 内部スロットを持たないため、"prototype" プロパティを持ちません。
  • 次のプロパティを持ちます。

28.2.2.1 Proxy.revocable ( target, handler )

この関数は revoke 可能な Proxy オブジェクトを作成します。

呼び出されたとき、次の手順を実行します。

  1. proxy を ? ProxyCreate(target, handler) とする。
  2. revokerClosure を、何も捕捉せず、パラメーターを持たず、呼び出されたときに次の手順を実行する新しい Abstract Closure とする。
    1. activeFunc をアクティブな関数オブジェクトとする。
    2. revocableProxy を activeFunc.[[RevocableProxy]] とする。
    3. revocableProxy が null である場合、NormalCompletion(undefined) を返す。
    4. activeFunc.[[RevocableProxy]] を null に設定する。
    5. 表明: revocableProxy は Proxy 特殊オブジェクトである。
    6. revocableProxy.[[ProxyTarget]] を null に設定する。
    7. revocableProxy.[[ProxyHandler]] を null に設定する。
    8. NormalCompletion(undefined) を返す。
  3. revoker を CreateBuiltinFunction(revokerClosure, 0, "", « [[RevocableProxy]] ») とする。
  4. revoker.[[RevocableProxy]] を proxy に設定する。
  5. result を OrdinaryObjectCreate(%Object.prototype%) とする。
  6. ! CreateDataPropertyOrThrow(result, "proxy", proxy) を実行する。
  7. ! CreateDataPropertyOrThrow(result, "revoke", revoker) を実行する。
  8. result を返す。

28.3 Module Namespace オブジェクト

Module Namespace Object は、モジュールがエクスポートした束縛への実行時のプロパティベースのアクセスを提供する module namespace 特殊オブジェクトです。Module Namespace Object にはコンストラクター関数はありません。代わりに、NameSpaceImport を含む ImportDeclaration によってインポートされる各モジュールについて、そのようなオブジェクトが作成されます。

10.4.6 で指定されるプロパティに加えて、各 Module Namespace Object は次の own プロパティを持ちます。

28.3.1 %Symbol.toStringTag%

%Symbol.toStringTag% プロパティの初期値は String 値 "Module" です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。