Proxy() コンストラクター
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 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"
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-constructor> |