Proxy() コンストラクター
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2016年9月以降、すべてのブラウザーで利用可能です。
Proxy() コンストラクターは Proxy オブジェクトを生成します。
構文
new Proxy(target, handler)
引数
解説
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.getOwnPropertyNamesやObject.getOwnPropertySymbolsのトラップです。 handler.preventExtensions()-
Object.preventExtensionsのトラップです。 handler.set()-
プロパティ値の設定のトラップです。
handler.setPrototypeOf()-
Object.setPrototypeOfのトラップです。
例
>選択的にプロパティアクセサーのプロキシーを行う
この例では、ターゲットは notProxied と proxied の 2 つのプロパティを持っています。 proxied に別の値を返し、それ以外のアクセスをターゲットに許可するハンドラーを定義します。
const target = {
notProxied: "original value",
proxied: "original value",
};
const handler = {
get(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® 2027 Language Specification> # sec-proxy-constructor> |
ブラウザーの互換性
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。