¿Es posible pasar parámetros a un controlador "Proxy" de ES6?
Quiero anular la configuración básica con configuraciones personalizadas y el Proxyobjeto parecía una solución ideal.
settingsHandler = {
get(target, property) {
return this.getSettings(property) || target[property];
}
}
this.settings = new Proxy(baseSettings, settingsHandler);
pero el thiscontexto dentro del controlador es solo el targetobjeto y this.getSettings(property)falla porque no está disponible.
Parece que Proxyno está destinado a esto, pero no puedo encontrarlo expresado de manera inequívoca. ¿Quizás debería hacer una clase en su lugar?
Respuestas
Encontré esta esencia que me ayudó a obtener la funcionalidad que quería envolviendo el Proxyinterior Classy haciendo que el settingsobjeto sea una propiedad de esa clase:
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 se instancia así: this.settings = new ProxySettings(this.token, baseTokenSettings);
Funciona bien, pero es un poco complicado y no he visto este patrón antes, así que no estoy seguro de si esta es la mejor manera de hacerlo. Se agradece cualquier aporte.
Al considerar los útiles consejos, la solución más simple que se ajustaba a mis necesidades era usar la sintaxis de la función de flecha:
const settingsHandler = {
get: (target, property) => {
return this.getSettings(property) || target[property];
}
}