handler.has()in 演算子に対するトラップです。

構文

var p = new Proxy(target, {
  has: function(target, prop) {
  }
});

引数

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

target
ターゲットオブジェクトです。
prop
存在を確認するプロパティ名です。

戻り値

has メソッドは真偽値を返さなければなりません。

説明

handler.has メソッドは in 演算子に対するトラップです。

インターセプト

このトラップは下記の操作をインターセプトできます。:

不変条件

次の不変条件に違反している場合、プロキシはTypeErrorをスローします。:

  • プロパティがターゲットオブジェクトの設定不可の独自プロパティとして存在する場合、存在しないとして報告されてはいけません。
  • プロパティがターゲットオブジェクトの独自プロパティとして存在し、そのターゲットオブジェクトが拡張不可の場合、存在しないとして報告されてはいけません。

次のコードでは in 演算子をトラップします。

var p = new Proxy({}, {
  has: function(target, prop) {
    console.log('called: ' + prop);
    return true;
  }
});

console.log('a' in p); // "called: a"
                       // true

次のコードでは不変条件に違反します。

var obj = { a: 10 };
Object.preventExtensions(obj);
var p = new Proxy(obj, {
  has: function(target, prop) {
    return false;
  }
});

'a' in p; // TypeError is thrown

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
[[HasProperty]] の定義
標準 初期定義
ECMAScript Latest Draft (ECMA-262)
[[HasProperty]] の定義
ドラフト  

ブラウザ実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応491218 なし3610
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応4949 あり1836105.0

関連情報

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

このページの貢献者: segayuu, SphinxKnight, shide55
最終更新者: segayuu,