मेरे पास एक कक्षा है जो XMLHttpRequest इंटरफ़ेस लागू करती है। open()
पर यूआरएल के आधार पर, मैं निर्धारित कर सकता हूं कि डिफ़ॉल्ट XMLHttpRequest या मेरे कस्टम कार्यान्वयन का उपयोग करना है या नहीं। मेरा विचार प्रॉक्सी का उपयोग करने यह करने के लिए है:क्या प्रॉक्सी के लक्ष्य को बदलना संभव है?
let xhr = new XHRProxy();
xhr.open('GET', 'http://blah'); // Decide here depending on URL
मैं कुछ ES6 प्रॉक्सी, जो होनहार लगता है का उपयोग कर परीक्षण है, लेकिन दुर्भाग्य से किया प्रॉक्सी लक्ष्य प्रॉक्सी के निर्माण के बाद बदला नहीं जा सकता:
var foo = {
name() {
return "foo";
}
};
var bar = {
name() {
return "bar";
}
}
var handler = {
get(target, property, receiver) {
if (property === "switchToBar") {
// FIXME: This doesn't work because a Proxy's target is not exposed AFAIK
receiver.target = bar;
return function() {};
} else {
return target[property];
}
}
}
var proxy = new Proxy(foo, handler);
console.log(proxy.name()); // foo
proxy.switchToBar();
console.log(proxy.name()); // foo :(
मुझे लगता है कि मैं लक्ष्य को सेट न करके मैं जो चाहता हूं उसे पूरा कर सकता हूं - वांछित ऑब्जेक्ट में प्रतिनिधि के लिए सभी जाल को परिभाषित करने के बजाय - लेकिन मैं एक आसान समाधान की उम्मीद कर रहा हूं।
ध्यान दें कि आप '.switchToBar' प्रॉपर्टी' प्राप्त करने पर पहले से ही लक्ष्य को बदलने की कोशिश कर रहे हैं, 'switchToBar()' विधि को कॉल करने पर नहीं – Bergi
हाँ, लेकिन मुझे नहीं लगता कि यह इस उदाहरण के लिए महत्वपूर्ण है। और XHR.open के साथ इसका उपयोग करने के लिए, मैं वास्तव में XHR.open कार्यान्वयन को कॉल करने से पहले प्रतिनिधि को सेट करना चाहता हूं। –