廃止
この機能は廃止されました。まだいくつかのブラウザーで動作するかもしれませんが、いつ削除されてもおかしくないので、使わないようにしましょう。
handler.enumerate()
メソッドはfor...in
ステートメントにトラップを仕掛けるために使用されましたが、 ES2016 で ECMAScript 標準から削除され、ブラウザーで非推奨になりました。
構文
var p = new Proxy(target, {
enumerate(target) {
}
});
引数
次の引数が enumerate
メソッドに渡されます。 this
はハンドラーにバインドされます。
target
- 対象オブジェクト。
返値
iterator オブジェクト。
解説
handler.enumerate
メソッドはfor...in
文に対するトラップです。
妨害
このトラップは下記の操作を妨害できます。:
- Property enumeration / for...in:
for (var name in proxy) {...}
Reflect.enumerate()
不変条件
次の不変条件に違反している場合、 proxy は TypeError
をスローします。
enumerate
メソッドはオブジェクトを返さなければなりません。
例
次のコードではfor...in
文をトラップします。
var p = new Proxy({}, {
enumerate(target) {
console.log('called');
return ['a', 'b', 'c'][Symbol.iterator]();
}
});
for (var x in p) { // "called"
console.log(x); // "a"
} // "b"
// "c"
次のコードでは不変条件に違反します。
var p = new Proxy({}, {
enumerate(target) {
return 1;
}
});
for (var x in p) {} // TypeError is thrown
メモ: 両方の例ではメソッド定義の短縮構文を使用しています。
仕様書
どの標準にも含まれていません。
ブラウザーの互換性
どこでも対応されていません。歴史的には Firefox 37 から 46 が対応していました。
関連情報
Proxy
handler
for...in
ステートメントReflect.enumerate()