JavaScript

Reflect オブジェクト

 編集:2022.08.09 by T.A.

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

静的メソッド
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() と同様です。返値は論理値で、プロパティが定義できた場合は 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)
論理値で、対象がそのプロパティを持っているかどうかを返します。固有の場合も継承の場合も含みます。in 演算子を関数にしたものです。
Reflect.isExtensible(target)
Object.isExtensible() と同じです。論理値を返し、true ならば対象が拡張可能です。
Reflect.ownKeys(target)
独自の(継承されているものではない)プロパティのキーをもつ文字列の配列を返します。
Reflect.preventExtensions(target)
Object.preventExtensions() に似ています。論理値を返し、true は更新に成功した場合です。
Reflect.set(target, propertyKey, value[, receiver])
値をプロパティに割り当てる関数です。更新に成功したら true となる論理値を返します。
Reflect.setPrototypeOf(target, prototype)
オブジェクトのプロトタイプを設定する関数です。論理値を返し、true ならば成功です。
オブジェクトが特定のプロパティを持っているかどうかを検出
//コンソールにて
const duck = {
  name: 'Maurice',
  color: 'white',
  greeting: function() {
    console.log(`Quaaaack! My name is ${this.name}`);
  }
}

Reflect.has(duck, 'color');
// true
Reflect.has(duck, 'haircut');
// false
オブジェクトが所有するキーの返却
//コンソールにて
Reflect.ownKeys(duck);
// [ "name", "color", "greeting" ]
オブジェクトへの新しいプロパティの追加
//コンソールにて
Reflect.set(duck, 'eyes', 'black');
// 成功した場合は "true" を返します。
// "duck" には "eyes: 'black'" プロパティが設定されました。

テスト