क्या ES6 `प्रॉक्सी 'हैंडलर में मापदंडों को पारित करना संभव है?
मैं कस्टम सेटिंग्स के साथ बेस सेटिंग्स को ओवरराइड करना चाहता हूं और Proxyऑब्जेक्ट एक आदर्श समाधान की तरह लग रहा था।
settingsHandler = {
get(target, property) {
return this.getSettings(property) || target[property];
}
}
this.settings = new Proxy(baseSettings, settingsHandler);
लेकिन this
हैंडलर के अंदर का संदर्भ सिर्फ target
वस्तु है, और this.getSettings(property)
विफल है क्योंकि यह उपलब्ध नहीं है।
ऐसा लगता Proxy
है कि इस के लिए नहीं है, लेकिन मुझे लगता है कि असमान रूप से कहा नहीं मिल सकता है। शायद मुझे इसके बजाय एक वर्ग बनाना चाहिए?
जवाब
मुझे यह पता चला जिसने मुझे Proxy
अंदर से लपेटकर Class
और settings
उस वर्ग की एक संपत्ति होने के कारण मुझे जो कार्यक्षमता प्राप्त करने में मदद मिली , वह है:
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];
}
};
}
}
जो तत्काल की तरह है: this.settings = new ProxySettings(this.token, baseTokenSettings);
अच्छी तरह से काम करता है, लेकिन यह थोड़ा गड़बड़ है और मैंने इस पैटर्न को पहले नहीं देखा है इसलिए मैं कुछ अनिश्चित हूं अगर यह ऐसा करने का सबसे अच्छा तरीका है। किसी भी इनपुट की सराहना की।
सहायक सलाह पर विचार करने पर, मेरी जरूरतों के हिसाब से फिट होने वाला सबसे सरल समाधान तीर फ़ंक्शन सिंटैक्स का उपयोग करना था:
const settingsHandler = {
get: (target, property) => {
return this.getSettings(property) || target[property];
}
}