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 の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
ReflectChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
applyChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
constructChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
definePropertyChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
deletePropertyChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
getChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
getOwnPropertyDescriptorChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
getPrototypeOfChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
hasChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
isExtensibleChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
ownKeysChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
preventExtensionsChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
setChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0
setPrototypeOfChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

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