Czy jest możliwe przekazanie parametrów do programu obsługi `Proxy 'ES6?
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 this
kontekst wewnątrz procedury obsługi jest tylko target
obiektem i this.getSettings(property)
kończy się niepowodzeniem, ponieważ nie jest dostępny.
Wydaje się, że Proxy
nie jest do tego przeznaczone, ale nie mogę znaleźć tego jednoznacznie. Może zamiast tego powinienem zrobić klasę?
Odpowiedzi
Znalazłem tę istotę, która pomogła mi uzyskać funkcjonalność, której chciałem, zawijając Proxy
wnętrze a Class
i mając settings
obiekt 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.
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];
}
}