Te metody, które przychodzą ci do głowy, jakie są plusy i minusy każdego z nich?Jak utworzyć opakowanie/proxy XMLHttpRequest?
Metoda 1: Rozszerz rodzimy przypadek
var _XMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function() {
var xhr = new _XMLHttpRequest();
// augment/wrap/modify here
var _open = xhr.open;
xhr.open = function() {
// custom stuff
return _open.apply(this, arguments);
}
return xhr;
}
Metoda 2: Sub "klasa" native XMLHttpRequest
var _XMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function() {
// definePropertys here etc
}
XMLHttpRequest.prototype = new _XMLHttpRequest());
// OR
XMLHttpRequest.prototype = Object.create(_XMLHttpRequest);
// custom wrapped methods on prototype here
XMLHttpRequest.prototype.open = function() {
// custom stuff
return _XMLHttpRequest.prototype.open.apply(this, arguments);
}
Metoda 3: Pełne proxy do rodzimej XMLHttpRequest
var _XMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function() {
this.xhr = new _XMLHttpRequest();
}
// proxy ALL methods/properties
XMLHttpRequest.prototype.open = function() {
// custom stuff
return this.xhr.open.apply(this.xhr, arguments);
}
Twoja pierwsza metoda wydaje mi się błędna. Obawiam się, że dostaniesz pętlę rekurencyjną, dopóki nie uzyskasz przepełnienia stosu. ;) I dlaczego tego chcesz? Istnieje wiele ciekawszych rozwiązań, które nie muszą zapewniać wywołań funkcji do przywoływanego obiektu. –
Marcel: masz rację, to był typ, naprawiłem go. – tlrobinson
ThiefMaster: większość moich pytań nigdy nie jest odpowiednio odpowiedziana ... – tlrobinson