Proxy() コンストラクター
Proxy()
コンストラクターは Proxy
オブジェクトを生成するために使用します。
構文
引数
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.getOwnPropertyNames
やObject.getOwnPropertySymbols
のトラップです。 handler.preventExtensions()
-
Object.preventExtensions
のトラップです。 handler.set()
-
プロパティ値の設定のトラップです。
handler.setPrototypeOf()
-
Object.setPrototypeOf
のトラップです。
例
選択的にプロパティアクセサーのプロキシーを行う
この例では、ターゲットは notProxied
と proxied
の 2 つのプロパティを持っています。 proxied
に別の値を返し、それ以外のアクセスをターゲットに許可するハンドラーを定義します。
js
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 Language Specification # sec-proxy-constructor |
ブラウザーの互換性
BCD tables only load in the browser