Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. JavaScript
  3. JavaScript リファレンス
  4. 標準組み込みオブジェクト
  5. Proxy
  6. Proxy()
  7. get()

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

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]]内部メソッドに対するトラップです。プロパティアクセサーなどの操作で使用されます。

試してみましょう

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 です。

receiver

this 値はゲッター用です。Reflect.get() を参照してください。これは通常、プロキシー自身か、プロキシーを継承するオブジェクトです。

返値

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

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp