このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
handler.get()
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月.
handler.get() は、オブジェクトの[[Get]]内部メソッドに対するトラップです。プロパティアクセサーなどの操作で使用されます。
In this article
試してみましょう
const monster = { secret: "easily scared", eyeCount: 4,};const handler = { get(target, prop, receiver) { if (prop === "secret") { return `${target.secret.substring(0, 4)} ... shhhh!`; } return Reflect.get(...arguments); },};const proxy = new Proxy(monster, handler);console.log(proxy.eyeCount);// 予想される結果: 4console.log(proxy.secret);// 予想される結果: "easi ... shhhh!"構文
js
new Proxy(target, { get(target, property, receiver) { }})引数
次の引数がget() メソッドに渡されます。this はハンドラーにバインドされます。
targetターゲットオブジェクトです。
propertyプロパティの名称を表す文字列または
Symbolです。receiverthis値はゲッター用です。Reflect.get()を参照してください。これは通常、プロキシー自身か、プロキシーを継承するオブジェクトです。
返値
get() メソッドはどんな値でも返すことができます。
解説
>介入
このトラップは下記の操作に介入できます。
- プロパティアクセス:
proxy[foo]とproxy.bar Reflect.get()
他にも、[[Get]]内部メソッドを呼び出すあらゆる操作に介入できます。
不変条件
プロキシーの内部メソッド[[Get]] は、ハンドラー定義が以下の不変条件のいずれかに違反している場合、TypeError が発生します。
- このプロパティで報告される値は、ターゲットオブジェクトのプロパティが書き込み不可かつ構成不可の自身で所有するデータプロパティである場合、対応するターゲットオブジェクトのプロパティの値と同じでなければなりません。つまり、
Reflect.getOwnPropertyDescriptor()が、targetのプロパティに対してconfigurable: false, writable: falseを返した場合、トラップは、targetのプロパティ記述子のvalue属性と同じ値を返さなければなりません。 - 対応するターゲットオブジェクトプロパティが、undefined ゲッターを持つ構成不可な自身のアクセサープロパティである場合、プロパティに対して報告される値は
undefinedでなければなりません。つまり、Reflect.getOwnPropertyDescriptor()が、targetのプロパティに対してconfigurable: false, get: undefinedを返す場合、トラップはundefinedを返す必要があります。
例
>プロパティ値の取得のトラップ
次のコードではプロパティ値の取得をトラップします。
js
const p = new Proxy( {}, { get(target, property, receiver) { console.log(`called: ${property}`); return 10; }, },);console.log(p.a);// "called: a"// 10次のコードでは不変条件に違反します。
js
const obj = {};Object.defineProperty(obj, "a", { configurable: false, enumerable: false, value: 10, writable: false,});const p = new Proxy(obj, { get(target, property) { return 20; },});p.a; // TypeError is thrown仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver> |