Proxy

(標準組み込みオブジェクト)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy

proxy = new Proxy(target, handler);

Proxyを使用するとオブジェクトの基本的な操作を拡張したオブジェクトを生成することが可能である。
第1引数のtargetは元となるオブジェクト、第2引数のhandlerは特定の操作をインターセプトする、またインターセプトした操作の処理を定義するオブジェクトである。
また、handlerで定義するメソッドのことを、Proxyではしばしばトラップと呼ぶ。

getトラップ

get: function(target, property, receiver){}

getトラップはプロパティが取得された時に呼び出されるトラップである。
第1引数の target は元のオブジェクト、第2引数の property は取得するプロパティ名、第3引数の receiver はproxyオブジェクト(またはproxyから継承している場合は継承したオブジェクト)である。

以下は存在しないプロパティを取得しようとした時にエラーとなる実装である。

const target = {
  hoge: "fuga",
};
const handler = {
  get: (target, property, receiver) => {
    if (property in target) {
      return target[property];
    }
    throw new Error("プロパティが存在しません");
  },
};
const proxy = new Proxy(target, handler);
console.log(proxy.hoge); // fuga
console.log(proxy.piyo); // Uncaught Error: プロパティが存在しません
inserted by FC2 system