Ist es möglich, Parameter an einen ES6-Proxy-Handler zu übergeben?
Ich möchte die Grundeinstellungen mit benutzerdefinierten Einstellungen überschreiben, und das ProxyObjekt schien eine ideale Lösung zu sein.
settingsHandler = {
get(target, property) {
return this.getSettings(property) || target[property];
}
}
this.settings = new Proxy(baseSettings, settingsHandler);
Der this
Kontext im Handler ist jedoch nur das target
Objekt und this.getSettings(property)
schlägt fehl, weil er nicht verfügbar ist.
Scheint Proxy
nicht dafür gedacht zu sein, aber ich kann das nicht eindeutig finden. Vielleicht sollte ich stattdessen eine Klasse machen?
Antworten
Ich habe diesen Kern gefunden, der mir geholfen hat, die gewünschte Funktionalität zu erhalten, indem ich das Proxy
Innere von a verpackt Class
und das settings
Objekt zu einer Eigenschaft dieser Klasse gemacht habe:
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];
}
};
}
}
Welches ist so instanziiert: this.settings = new ProxySettings(this.token, baseTokenSettings);
Funktioniert gut, ist aber etwas chaotisch und ich habe dieses Muster noch nie gesehen. Daher bin ich mir nicht sicher, ob dies der beste Weg ist, dies zu tun. Jede Eingabe wird geschätzt.
In Anbetracht der hilfreichen Ratschläge war die einfachste Lösung, die meinen Anforderungen entsprach, die Verwendung der Pfeilfunktionssyntax:
const settingsHandler = {
get: (target, property) => {
return this.getSettings(property) || target[property];
}
}