Proxy() コンストラクター

Proxy() コンストラクターは Proxy オブジェクトを生成するために使用します。

構文

new Proxy(target, handler)

引数

target
Proxy でラップするターゲットのオブジェクトです。あらゆる種類のオブジェクト、例えばネイティブ配列や関数、別のプロキシなどがなることができます。
handler
関数をプロパティとして持つオブジェクトで、その関数で、 Proxy p に対して操作が行われた場合の挙動を定義します。

解説

Proxy() コンストラクターを使用すると、新しい Proxy オブジェクトを生成することができます。このコンストラクターは2つの必須の引数を取ります。

  • target はプロキシを作成するオブジェクトです。
  • handler はプロキシのカスタム動作を定義するオブジェクトです。

handler を空にすると、ほとんどすべての点でターゲットとまったく同じように振る舞うプロキシを作成します。 handler オブジェクト上で関数群のいずれかを定義することで、プロキシの動作の特定の側面をカスタマイズすることができます。例えば、 get() を定義することで、 ターゲットのプロパティアクセサーのカスタマイズされたバージョンを提供することができます。

ハンドラー関数

この節では、定義することができるすべてのハンドラー関数を列挙します。ハンドラー関数は、対象オブジェクトの呼び出しをトラップするので、トラップと呼ばれることがあります。

handler.apply()
関数呼び出しのトラップです。。
handler.construct()
new 演算子のトラップです。
handler.defineProperty()
Object.defineProperty のトラップです。
handler.deleteProperty()
delete 演算子のトラップです。
handler.get()
プロパティ値の取得のトラップです。
handler.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor のトラップです。
handler.getPrototypeOf()
Object.getPrototypeOf のトラップです。
handler.has()
in 演算子のトラップです。
handler.isExtensible()
Object.isExtensible のトラップです。
handler.ownKeys()
Object.getOwnPropertyNamesObject.getOwnPropertySymbols のトラップです。
handler.preventExtensions()
Object.preventExtensions のトラップです。
handler.set()
プロパティ値の設定のトラップです。
handler.setPrototypeOf()
Object.setPrototypeOf のトラップです。

選択的にプロパティアクセサーのプロキシを行う

この例では、ターゲットは notProxiedproxied の2つのプロパティを持っています。 proxied に別の値を返し、それ以外のアクセスをターゲットに許可するハンドラーを定義します。

const target = {
  notProxied: "original value",
  proxied: "original value"
};

const handler = {
  get: function(target, prop, receiver) {
    if (prop === "proxied") {
      return "replaced value";
    }
    return Reflect.get(...arguments);
  }
};

const proxy = new Proxy(target, handler);

console.log(proxy.notProxied); // "original value"
console.log(proxy.proxied);    // "replaced value"

仕様書

仕様書
ECMAScript (ECMA-262)
Proxy constructor の定義

ブラウザーの互換性

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

凡例

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

関連情報