このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
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 オブジェクトを生成します。
In this article
構文
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> |