handler.get() はプロパティの値を取得することに対するトラップです。

構文

var p = new Proxy(target, {
  get: function(target, property, receiver) {
  }
});

引数

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

target
ターゲットオブジェクト
property
取得するプロパティの名称
receiver
proxy、または proxy から継承するオブジェクトのどちらか

戻り値

get メソッドはどんな値でも返すことができます。

説明

handler.get メソッドはプロパティ値を取得することに対するトラップです。

インターセプト

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

  • プロパティアクセス: proxy[foo] と proxy.bar
  • 継承したプロパティアクセス: Object.create(proxy)[foo]
  • Reflect.get()

不変条件

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

  • ターゲットオブジェクトプロパティが書き込み不可で非設定なデータプロパティなら、プロパティに対して報告される値は対応するターゲットオブジェクトプロパティと同じでなければなりません。
  • 対応するターゲットオブジェクトプロパティが[[Get]]属性として未定義で非設定なアクセスプロパティなら、プロパティに対して報告される値は未定義でなければなりません。

次のコードではプロパティを取得してトラップします。

var p = new Proxy({}, {
  get: function(target, property, receiver) {
    console.log('called: ' + property);
    return 10;
  }
});

console.log(p.a); // "called: a"
                  // 10

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

var obj = {};
Object.defineProperty(obj, 'a', { 
  configurable: false, 
  enumerable: false, 
  value: 10, 
  writable: false 
});

var p = new Proxy(obj, {
  get: function(target, prop) {
    return 20;
  }
});

p.a; // TypeError is thrown

仕様

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

ブラウザ実装状況

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

関連情報

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

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