Reflect
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
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
ならば成功です。
例
オブジェクトが特定のプロパティを持っているかどうかを検出
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'" プロパティが設定されました。
仕様書
Specification |
---|
ECMAScript Language Specification # sec-reflect-object |
ブラウザーの互換性
BCD tables only load in the browser