Как расширить объект XMLHttpRequest в JavaScript? - PullRequest
2 голосов
/ 08 февраля 2011

Я хотел бы расширить существующий объект XMLHttpRequest, чтобы он работал со всеми браузерами. Теперь я прошел через JS-наследование и все, но перед тем, как начать, я хотел бы увидеть хороший пример этого.

В HTML5 есть события загрузки и прогресса, которые я хотел бы реализовать в унаследованном новом объекте, который может вести себя, даже если функция не поддерживается, если не вводить ошибки JS на стороне клиента. поэтому я хотел бы добиться чего-то подобного.

Class XMLHttpRequest{}
Class UploadXMLHttpRequest: XMLHttpRequest{}

Где к классу UploadXMLHttpRequest могут быть прикреплены дополнительные методы, как показано ниже.

UploadXMLHttpRequest.prototype.uploadFile = function(file){

}

Учитывая, что YUI, JQuery и другие хороши на рынке, никто на самом деле не хотел этого делать, поэтому мне было немного трудно найти хорошие ресурсы.

1 Ответ

7 голосов
/ 08 февраля 2011

Не делай этого. XMLHttpRequest - это хост-объект, и вы не должны пытаться его расширить. Цитировать Кангакс :

Следующая проблема с расширением DOM что объекты DOM являются хост-объектами , и Хост-объекты - худшая группа. От спецификация (ECMA-262 3-е изд.), хост объектам разрешено делать вещи, нет другие объекты могут даже мечтать. к цитируйте соответствующий раздел [8.6.2] :

Хост-объекты могут реализовывать эти внутренние методы с любым поведение, зависящее от реализации, или может быть, что хост-объект реализует только некоторые внутренние методы а не др.

Это также означает, что хост-объекты могут запретить расширение с помощью prototype.

Однако, поскольку Kangax также советует , вы можете создать обертку вокруг XMLHttpRequest и делать с ней все что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...