Est-il possible de passer des paramètres dans un gestionnaire ES6 `Proxy '?
Je veux remplacer les paramètres de base par des paramètres personnalisés et l' Proxyobjet semblait être une solution idéale.
settingsHandler = {
get(target, property) {
return this.getSettings(property) || target[property];
}
}
this.settings = new Proxy(baseSettings, settingsHandler);
mais le this
contexte à l'intérieur du gestionnaire n'est que l' target
objet et this.getSettings(property)
échoue car il n'est pas disponible.
Il semble que ce Proxy
n'est pas destiné à cela, mais je ne peux pas trouver cela déclaré sans équivoque. Peut-être devrais-je faire un cours à la place?
Réponses
J'ai trouvé l'essentiel qui m'a aidé à obtenir la fonctionnalité que je voulais en enveloppant l' Proxy
intérieur d'un Class
et en faisant de l' settings
objet une propriété de cette classe:
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];
}
};
}
}
Ce qui est instancié comme ceci: this.settings = new ProxySettings(this.token, baseTokenSettings);
Fonctionne bien mais c'est un peu désordonné et je n'ai jamais vu ce modèle auparavant, donc je ne suis pas certain que ce soit la meilleure façon de le faire. Toute contribution appréciée.
En tenant compte des conseils utiles, la solution la plus simple qui correspondait à mes besoins était d'utiliser la syntaxe de la fonction de flèche:
const settingsHandler = {
get: (target, property) => {
return this.getSettings(property) || target[property];
}
}