Những phương pháp này đến với tâm trí, những ưu và khuyết điểm của mỗi phương pháp là gì?Làm cách nào để tạo trình bao bọc/proxy XMLHttpRequest?
Phương pháp 1: Tăng thêm dụ mẹ đẻ
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;
}
Cách 2: Chi "class" XMLHttpRequest mẹ đẻ
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);
}
Phương pháp 3: Toàn proxy để XMLHttpRequest mẹ đẻ
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);
}
Phương pháp đầu tiên của bạn có vẻ sai với tôi. Tôi lo sợ bạn sẽ nhận được trong một vòng lặp đệ quy cho đến khi bạn nhận được một Stack Overflow. ;) Và tại sao bạn muốn điều này không? Có rất nhiều giải pháp neater, mà không cần phải cung cấp các cuộc gọi hàm tới một đối tượng được tham chiếu. –
Marcel: bạn nói đúng, đó là một kiểu, tôi đã sửa nó. – tlrobinson
ThiefMaster: hầu hết các câu hỏi của tôi không bao giờ được trả lời đầy đủ ... – tlrobinson