handler.get()

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

構文

const 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]]属性として未定義で非設定なアクセスプロパティなら、プロパティに対して報告される値は未定義でなければなりません。

プロパティ値の取得のトラップ

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

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

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

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

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

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

p.a; // TypeError is thrown

仕様書

仕様書
ECMAScript (ECMA-262)
[[Get]] の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
getChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 18IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 18Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報