ES6の「プロキシ」ハンドラーにパラメーターを渡すことは可能ですか?

Nov 24 2020

基本設定をカスタム設定で上書きしたいのですが、Proxyオブジェクトは理想的なソリューションのようでした。

  settingsHandler = {
    get(target, property) {
        return this.getSettings(property) || target[property];
    }
  }
  this.settings = new Proxy(baseSettings, settingsHandler);

ただし、thisハンドラー内のコンテキストは単なるtargetオブジェクトであり、使用this.getSettings(property)できないため失敗します。

Proxyこれは意図されていないようですが、明確に述べられていることはわかりません。おそらく私は代わりにクラスを作るべきですか?

回答

edzillion Nov 25 2020 at 12:32

私が見つかりました。この主旨私がラップすることにより、私が欲しかった機能を得る助けたProxy内部AをClassと持つsettingsオブジェクトは、そのクラスのプロパティことを:

export default class ProxySettings extends Object {
  token: Token;
  settings: TokenSettings;

  constructor(token, settings) {
    super(...arguments);
    this.token = token;
    this.settings = settings;
    return new Proxy(this, this.handler);
  }
  get handler() {
    return {
      get(target, property) {
        return target.token.getSettings(property) || target.settings[property];
      }
    };
  }
}

これは次のようにインスタンス化されます: this.settings = new ProxySettings(this.token, baseTokenSettings);

うまく機能しますが、少し面倒で、このパターンを見たことがないので、これが最善の方法かどうかはわかりません。任意の入力を歓迎します。

edzillion Nov 25 2020 at 13:52

役立つアドバイスを検討する上で、私のニーズに合う最も簡単な解決策は、矢印関数構文を使用することでした。

const settingsHandler = {
  get: (target, property) => {
      return this.getSettings(property) || target[property];
  }
}