Reflect
Reflect は、JavaScript 操作を受け付けるためのメソッドを提供する組み込みオブジェクトです。メソッドはプロキシーハンドラーのメソッドと同じです。Reflect は関数オブジェクトではありませんので、構築することはできません。
解説
他の多くのグローバルオブジェクトとは異なり、Reflect はコンストラクターではありません。new 演算子で使用したり、 Reflect オブジェクトを関数として呼び出したりすることはできません。 Reflect のすべてのプロパティとメソッドは (Math オブジェクトと同様に) 静的です。
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ならば成功です。
例
オブジェクトが特定のプロパティを持っているかどうかを検出
js
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
オブジェクトが所有するキーの返却
js
Reflect.ownKeys(duck);
// [ "name", "color", "greeting" ]
オブジェクトへの新しいプロパティの追加
js
Reflect.set(duck, 'eyes', 'black');
// 成功した場合は "true" を返します。
// "duck" には "eyes: 'black'" プロパティが設定されました。
仕様書
| Specification |
|---|
| ECMAScript Language Specification # sec-reflect-object |
ブラウザーの互換性
BCD tables only load in the browser