É possível passar parâmetros para um manipulador ES6 `Proxy '?
Quero substituir as configurações básicas por configurações personalizadas e o Proxyobjeto parecia uma solução ideal.
settingsHandler = {
get(target, property) {
return this.getSettings(property) || target[property];
}
}
this.settings = new Proxy(baseSettings, settingsHandler);
mas o this
contexto dentro do manipulador é apenas o target
objeto e this.getSettings(property)
falha porque não está disponível.
Parece que Proxy
não foi feito para isso, mas não consigo encontrar isso afirmado de forma inequívoca. Talvez eu deva fazer uma aula em vez disso?
Respostas
Eu encontrei esta essência que me ajudou a obter a funcionalidade que eu queria, envolvendo o Proxy
interior de a Class
e tendo o settings
objeto como uma propriedade dessa 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];
}
};
}
}
Que é instanciado assim: this.settings = new ProxySettings(this.token, baseTokenSettings);
Funciona bem, mas é um pouco confuso e não vi esse padrão antes, então não tenho certeza se essa é a melhor maneira de fazer isso. Qualquer entrada apreciada.
Ao considerar o conselho útil, a solução mais simples que atendeu às minhas necessidades foi usar a sintaxe da função de seta:
const settingsHandler = {
get: (target, property) => {
return this.getSettings(property) || target[property];
}
}