Ho una classe che implementa l'interfaccia XMLHttpRequest. A seconda dell'URL passato a open()
, posso determinare se utilizzare l'XMLHttpRequest predefinito o la mia implementazione personalizzata. La mia idea è quella di utilizzare un proxy per fare questo:È possibile cambiare la destinazione di un Proxy?
let xhr = new XHRProxy();
xhr.open('GET', 'http://blah'); // Decide here depending on URL
Ho fatto alcuni test utilizzando l'ES6 Proxy, che sembra promettente, ma purtroppo l'obiettivo proxy non può essere modificato dopo la costruzione del Proxy:
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 :(
Penso di poter realizzare ciò che voglio non impostando un obiettivo - invece di definire tutte le trap da delegare all'oggetto desiderato - ma spero in una soluzione più semplice.
Si noti che si sta tentando di modificare il target già con la proprietà '.switchToBar', non sul metodo' .switchToBar() ' – Bergi
Sì, ma non penso che sia importante per questo esempio. E per usarlo con XHR.open, in realtà voglio impostare il delegato prima di chiamare l'implementazione XHR.open. –