Reflect

Reflect は、介入可能な JavaScript 操作に対するメソッドを提供する組込みオブジェクトです。メソッドはプロキシハンドラーのメソッドと同じです。 Reflect は関数オブジェクトではありませんので、構築することはできません。

解説

他のグローバルオブジェクトとは異なり、 Reflect はコンストラクターではありません。 new 演算子で使用したり、 Reflect オブジェクトを関数として呼び出すことはできません。 Reflect のすべてのプロパティとメソッドは (Math オブジェクトと同様に) 静的です。

Reflect オブジェクトはプロキシハンドラーメソッドと同じ名前をもつ、下記の関数を提供します。

これらのメソッドの一部は Object の対応するメソッドとも同じですが、これらの間にはいくらか微妙な違いがあります。

メソッド

Reflect.apply(target, thisArgument, argumentsList)
target 関数を、引数 argumentsList で指定された引数で呼び出します。 Function.prototype.apply() も参照してください。
Reflect.construct(target, argumentsList[, newTarget])
関数としての new 演算子です。 new target(...argumentsList) を呼び出すのと等価です。別なプロトタイプを指定するためにオプションを指定することもできます。
Reflect.defineProperty(target, propertyKey, attributes)
Object.defineProperty() と同様です。返値は Boolean で、プロパティが定義できた場合は true を返します。
Reflect.deleteProperty(target, propertyKey)
関数としての delete 演算子です。 delete target[propertyKey] を呼び出すのと等価です。
Reflect.get(target, propertyKey[, receiver])
このプロパティの値を返します。オブジェクトからのプロパティの取得 (target[propertyKey]) を関数にしたようなものです。
Reflect.getOwnPropertyDescriptor(target, propertyKey)
Object.getOwnPropertyDescriptor() に似ています。指定したプロパティが存在する場合にプロパティディスクリプターを返し、存在しない場合は undefined を返します。
Reflect.getPrototypeOf(target)
Object.getPrototypeOf() と同じです。
Reflect.has(target, propertyKey)
Boolean で対象がそのプロパティを持っているかどうかを返します。固有の場合も継承の場合も含みます。 in 演算子を関数にしたものです。
Reflect.isExtensible(target)
Object.isExtensible() と同じです。 Boolean を返し、 true ならば対象が拡張可能です。
Reflect.ownKeys(target)
独自の (継承されているものではない) プロパティのキーをもつ文字列の配列を返します。
Reflect.preventExtensions(target)
Object.preventExtensions() に似ています。 Boolean を返し、 true は更新に成功した場合です。
Reflect.set(target, propertyKey, value[, receiver])
値をプロパティに割り当てる関数です。更新に成功したら true となる Boolean を返します。
Reflect.setPrototypeOf(target, prototype)
オブジェクトのプロトタイプを設定する関数です。 Boolean を返し、 true ならば成功です。

仕様書

仕様書
ECMAScript (ECMA-262)
Reflect の定義

ブラウザーの互換性

BCD tables only load in the browser

関連情報

  • Proxy グローバルオブジェクト
  • handler オブジェクト