Reflect APIが実装された
概要
Reflectオブジェクトはグローバルに存在し、演算子がするような作用や、内部的に行われているような作用をメソッドの形で提供する。
記事更新履歴
[2016/03/23] ES2016でenumerateトラップが削除されるのに対応
[2015/03/24] 公開
実装されたメソッド
Reflect.has ( target, key ) [4.8.9]
「 key in target 」とほぼ同じ*1。
Reflect.get ( target, key, receiver? ) [4.8.9]
「 target[ key ] 」とほぼ同じ*1だが、オプションでゲッターのthisとなるreceiverを指定できる。
Reflect.set ( target, key, value, receiver? ) [4.8.187]
「 target[ key = value ] 」とほぼ同じ*1だが、オプションでゲッターのthisとなるreceiverを指定でき、処理が成功したかの真偽値が返される。
Reflect.deleteProperty ( target, key ) [4.8.9]
「 delete target[ key ] 」とほぼ同じ*1。
Reflect.getOwnPropertyDescriptor ( target, key ) [4.8.187]
「 Object.getOwnPropertyDescriptor ( target ) 」とほぼ同じ*1。
Reflect.defineProperty ( target, key, attributes ) [4.8.180]
「 Object.defineProperty ( target, key, attributes ) 」とほぼ同じ*1だが、処理が成功したかの真偽値が返される。
Reflect.ownKeys ( target ) [4.9.14]
「 Object.getOwnPropertyNames( target ) 」や「 Object.getOwnPropertySymbols( target ) 」とほぼ同じ*1で、
オブジェクトが直接持つ全てのプロパティのキー(文字列やシンボル)の配列を返す。
Reflect.enumerate ( target ) [4.8.74 - 5.0.61]
for-in構文の様にtargetとそのプロトタイプチェーン下の列挙可能なプロパティのキーを列挙するイテレータを返す。*1
※ES2016で廃止
Reflect.getPrototypeOf ( target ) [4.8.128]
「 Object.getPrototypeOf ( target ) 」とほぼ同じ*1。
Reflect.setPrototypeOf ( target, proto ) [4.8.134]
「 Object.getPrototypeOf ( target, proto ) 」とほぼ同じ*1だが、処理が成功したかの真偽値が返される。
Reflect.isExtensible ( target ) [4.8.9]
「 Object.isExtensible( target ) 」とほぼ同じ*1。
Reflect.preventExtensions ( target ) [4.8.121]
「 Object.preventExtensions( target ) 」とほぼ同じ*1だが、
処理が成功したかの真偽値が返され、失敗しても例外とならない。
Reflect.apply ( target, thisArg, args ) [4.3.49]
「 target.apply( thisArg, args ) 」とほぼ同じ。
Reflect.construct ( target, args, newTarget? ) [4.3.49](第二引数まで) [4.5.86](第三引数)
「 new target( ...args ) 」とほぼ同じだが、オプションで[[newTarget]]を指定できる。
応用例:任意のクラスを継承した配列を作る
function Stack() { } Stack.prototype.clear = function () { this.length = 0 } var stack = Reflect.contruct( Array, [], Stack )
*1 - ただしtargetがオブジェクトでない場合例外となる。
実装されるバージョン
V8 4.3.49 - 4.9.14 4.9.354(デフォルト有効)