26.1 Reflectオブジェクト(The Reflect Object)
Reflectオブジェクトは、次の特徴があります。
- 組み込みオブジェクト%Reflect%です。
- グローバルオブジェクトの"Reflect"プロパティの初期値です。
- 通常のオブジェクトです。
- [[Prototype]]内部スロットがあり、値は%Object.prototype%です。
- 関数オブジェクトではありません。
- [[Construct]]内部メソッドはありません。 new演算子のコンストラクターとして使用することはできません。
- [[Call]]内部メソッドはありません。 関数として呼び出すことはできません。
26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
apply関数が引数target、thisArgument、argumentsListを指定して呼び出されると、次の手順が実行されます。
- IsCallable(target) が false なら、TypeError例外をスローする
- ? CreateListFromArrayLike(argumentsList) を args とする
- PrepareForTailCall() を実行する
- ? Call(target, thisArgument, args) を返す
26.1.2 Reflect.construct ( target, argumentsList [ , newTarget ] )
construct関数が引数target、argumentsList、newTargetを使用して呼び出されると、次の手順が実行されます。
- IsConstructor(target) が false なら、TypeError例外をスローする
- newTarget が 存在しないなら、 target を newTarget にセットする
- 2. と異なり、 IsConstructor(newTarget) が false なら TypeError例外をスローする
- ? CreateListFromArrayLike(argumentsList) を args とする
- ? Construct(target, args, newTarget) を返す
26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
defineProperty 関数が引数 target と propertyKey と attributes で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? ToPropertyKey(propertyKey) を key とする
- ? ToPropertyDescriptor(attributes) を desc とする
- ? target.[[DefineOwnProperty]](key, desc) を返す
26.1.4 Reflect.deleteProperty ( target, propertyKey )
deleteProperty 関数が引数 target と propertyKey で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? ToPropertyKey(propertyKey) を key とする
- ? target.[[Delete]](key) を返す
26.1.5 Reflect.get ( target, propertyKey [ , receiver ] )
get 関数が引数 target と propertyKey と receiver で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? ToPropertyKey(propertyKey) を key とする
- receiver が 存在しないなら、
- target を receiver にセットする
- ? target.[[Get]](key, receiver) を返す
26.1.6 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
getOwnPropertyDescriptor 関数が引数 target と propertyKey で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? ToPropertyKey(propertyKey) を key とする
- ? target.[[GetOwnProperty]](key) を desc とする
- FromPropertyDescriptor(desc) を返す
26.1.7 Reflect.getPrototypeOf ( target )
the getPrototypeOf function が引数 target で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? target.[[GetPrototypeOf]]() を返す
26.1.8 Reflect.has ( target, propertyKey )
has 関数が引数 target と propertyKey で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? ToPropertyKey(propertyKey) を key とする
- ? target.[[HasProperty]](key) を返す
26.1.9 Reflect.isExtensible ( target )
isExtensible 関数が引数 target で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? target.[[IsExtensible]]() を返す
26.1.10 Reflect.ownKeys ( target )
ownKeys 関数が引数 target で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? target.[[OwnPropertyKeys]]() を keys とする
- CreateArrayFromList(keys) を返す
26.1.11 Reflect.preventExtensions ( target )
preventExtensions 関数が引数 target で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? target.[[PreventExtensions]]() を返す
26.1.12 Reflect.set ( target, propertyKey, V [ , receiver ] )
set 関数が引数 target と V と propertyKey と receiver で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- ? ToPropertyKey(propertyKey) を key とする
- receiver が 存在しないなら、
- target を receiver にセットする
- ? target.[[Set]](key, V, receiver) を返す
26.1.13 Reflect.setPrototypeOf ( target, proto )
setPrototypeOf 関数が引数 target と proto で呼び出されると、次の手順が実行されます。
- Type(target) が Object型でないなら、TypeError例外をスローする
- Type(proto) が not Object and proto is not null なら、TypeError例外をスローする
- ? target.[[SetPrototypeOf]](proto) を返す
26.2 Proxyオブジェクト(Proxy Objects)
26.2.1 Proxyコンストラクター(The Proxy Constructor)
Proxyコンストラクターは、次の特徴があります。
- 組み込みオブジェクト%Proxy%です。
- グローバルオブジェクトの"Proxy"プロパティの初期値です。
- コンストラクターとして呼び出されると、新しいProxyエキゾチックオブジェクト を作成して初期化します。
- 関数として呼び出すと例外がスローされます。
26.2.1.1 Proxy ( target, handler )
Proxyが引数targetおよびhandlerを使用して呼び出されると、次の手順が実行されます。
- NewTarget が undefined なら、TypeError例外をスローする
- ? ProxyCreate(target, handler) を返す
26.2.2 Proxyコンストラクタのプロパティ(Properties of the Proxy Constructor)
Proxyコンストラクターは、次の特徴があります。
- [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
- "prototype"プロパティはありません。(Proxyエキゾチックオブジェクトに初期化が必要な[[Prototype]]内部スロットがないため)
- 以下のプロパティがあります。
26.2.2.1 Proxy.revocable ( target, handler )
Proxy.revocable関数は、取り消し可能なProxyオブジェクトを作成するために使用されます。 Proxy.revocableが引数targetおよびhandlerを使用して呼び出されると、次の手順が実行されます。
- ? ProxyCreate(target, handler) を p とする
- Proxy Revocation関数 のアルゴリズムステップを steps とする
- ! CreateBuiltinFunction(steps, « [[RevocableProxy]] ») を revoker とする
- p を revoker.[[RevocableProxy]] にセットする
- OrdinaryObjectCreate(%Object.prototype%) を result とする
- ! CreateDataPropertyOrThrow(result, "proxy", p) を実行する
- ! CreateDataPropertyOrThrow(result, "revoke", revoker) を実行する
- result を返す
26.2.2.1.1 Proxy Revocation関数(Functions)
Proxy Revocation関数は、特定のプロキシオブジェクトを無効にする機能を持つ匿名の組み込み関数です。
この関数には、[[RevocableProxy]]内部スロットがあります。
この関数が呼び出されると、次の手順が実行されます。
- アクティブ関数オブジェクト を F とする
- F.[[RevocableProxy]] を p とする
- p が null なら、 undefined を返す
- null を F.[[RevocableProxy]] にセットする
- Assert: p は Proxyオブジェクト
- null を p.[[ProxyTarget]] にセットする
- null を p.[[ProxyHandler]] にセットする
- undefined を返す
この関の "length" プロパティは 0 です。
26.3 モジュールネームスペースオブジェクト(Module Namespace Objects)
モジュールネームスペースオブジェクトは、モジュールからエクスポートされたバインディングへのランタイムプロパティベースアクセスを提供するモジュールネームスペースエキゾチックオブジェクトです。このオブジェクトにコンストラクター関数はありません。代わりに、NameSpaceImportを含むImportDeclarationによってインポートされるモジュールごとに作成されます。
9.4.6で指定されたプロパティに加えて、このオブジェクトには以下の独自プロパティがあります。
26.3.1 @@toStringTag
@@toStringTagプロパティの初期値は、文字列値"Module"です。
このプロパティの属性は{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }です。