JS.next

JavaScriptの最新実装情報を追うブログ

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(デフォルト有効)