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

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

メモ: 両方の例ではメソッド定義の短縮構文を使用しています。

仕様策定状況

仕様書 策定状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
[[Enumerate]] の定義
標準 初回定義。 ECMAScript 2016 で削除。

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応
非推奨非標準
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 37 — 47IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしEdge Mobile 未対応 なしFirefox Android 未対応 37 — 47Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし

凡例

未対応  
未対応
非標準。ブラウザー間の互換性が低い可能性があります。
非標準。ブラウザー間の互換性が低い可能性があります。
非推奨。新しいウェブサイトでは使用しないでください。
非推奨。新しいウェブサイトでは使用しないでください。

関連項目

ドキュメントのタグと貢献者

このページの貢献者: mfuji09, lv7777, shide55
最終更新者: mfuji09,