Czy jest możliwe przekazanie parametrów do programu obsługi `Proxy 'ES6?

Nov 24 2020

Chcę zastąpić ustawienia podstawowe ustawieniami niestandardowymi, a Proxyobiekt wydawał się idealnym rozwiązaniem.

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

ale thiskontekst wewnątrz procedury obsługi jest tylko targetobiektem i this.getSettings(property)kończy się niepowodzeniem, ponieważ nie jest dostępny.

Wydaje się, że Proxynie jest do tego przeznaczone, ale nie mogę znaleźć tego jednoznacznie. Może zamiast tego powinienem zrobić klasę?

Odpowiedzi

edzillion Nov 25 2020 at 12:32

Znalazłem tę istotę, która pomogła mi uzyskać funkcjonalność, której chciałem, zawijając Proxywnętrze a Classi mając settingsobiekt jako właściwość tej klasy:

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];
      }
    };
  }
}

Który jest tworzony w następujący sposób: this.settings = new ProxySettings(this.token, baseTokenSettings);

Działa dobrze, ale jest trochę niechlujny i wcześniej nie widziałem tego wzoru, więc nie jestem pewien, czy to najlepszy sposób na zrobienie tego. Wszelkie uwagi mile widziane.

edzillion Nov 25 2020 at 13:52

Biorąc pod uwagę pomocne rady, najprostszym rozwiązaniem, które pasowało do moich potrzeb, było użycie składni funkcji strzałek:

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