handler.enumerate()

廃止
この機能は廃止されました。まだいくつかのブラウザーで動作するかもしれませんが、いつ削除されてもおかしくないので、使わないようにしましょう。

handler.enumerate() メソッドはfor...in ステートメントにトラップを仕掛けるために使用されましたが、 ES2016 で ECMAScript 標準から削除され、ブラウザーで非推奨になりました。

構文

var p = new Proxy(target, {
  enumerate(target) {
  }
});

引数

次の引数が enumerate メソッドに渡されます。 this はハンドラーにバインドされます。

target
対象オブジェクト。

返値

iterator オブジェクト。

解説

handler.enumerate メソッドはfor...in 文に対するトラップです。

妨害

このトラップは下記の操作を妨害できます。:

不変条件

次の不変条件に違反している場合、 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 が対応していました。

関連情報