2011-02-08 5 views
2

既存のXMLHttpRequestオブジェクトを拡張して、すべてのブラウザで使用できるようにしたいと考えています。今私はJS inheritanceと物事が始まった前に私はそれの良い例を見たいと思います。JavaScriptでXMLHttpRequestオブジェクトを拡張するには?

HTML5には継承された新しいオブジェクトに実装したいアップロードイベントと進捗イベントがあります。これは、JSエラーをクライアント側に導入しないことでその機能がサポートされていなくても動作します。だから私はこのようなものを達成したいと思っています。

Class XMLHttpRequest{} 
Class UploadXMLHttpRequest: XMLHttpRequest{} 

追加のメソッドは、次のようにUploadXMLHttpRequestクラスに追加できます。 YUIを考慮

UploadXMLHttpRequest.prototype.uploadFile = function(file){ 

} 

は、jQueryと他の人は誰もが本当に、これは、それは少し難しい私は良いリソースを見つけるために作らやりたいん市場では良いです。

+0

すべてのブラウザがXMLHttpRequestクラスを持っているわけではないので、目標を達成できません。すべてのブラウザではなく、私はインターネットエクスプローラを意味します。あなたがしなければならないことは、それらの「良い市場の」図書館を使用し、ラッパーを使ってあなたのajax呼び出しを行うことです。 – BiAiB

+1

[XMLHttpRequestのgetResponseHeaderメソッドをオーバーライドできませんでした](http://stackoverflow.com/questions/3581959/failed-to-override-the-getresponseheader-method-on-xmlhttprequest) –

+0

IEのActiveXObjectがわかりませんXMLHttpRequestなどがあります。私が知りたいのは、XMLHttpRequestを拡張して、きれいで安全なAPIを定期的に使用できるようにするための良い方法です。 –

答えて

7

これを行わないでください。 XMLHttpRequestはホストオブジェクトなので、ホストオブジェクトを拡張しようとしないでください。 Kangax引用すると:

は、DOMの拡張子を持つ次の問題は、DOMオブジェクトはホストオブジェクト、および ホストオブジェクトであることを で最悪の集まりです。 仕様(ECMA-262第3版)では、ホスト のオブジェクトは処理を許可されているため、 のオブジェクトでも夢見ることはできません。 引用関連セクション[8.6.2]へ:

ホストオブジェクトがどの 実装依存の動作とこれら 内部メソッドを実装することができ、または は、それがホストオブジェクト のみいくつかの内部メソッドを実装している可能性があり ありませんその他。

これは、ホストオブジェクトはprototypeを使用して拡張を許可しないことを意味します。

しかし、Kangaxもadvicesのように、XMLHttpRequestの周りにラッパーを作成し、好きなことをすることができます。

+1

私は完全に同意し、同様の回答を書いていたでしょう。また、ActiveXの 'XMLHttpRequest'オブジェクト(IEでは利用可能で、jQueryのネイティブ' XMLHttpRequest'オブジェクトよりも優先されます)は間違いなく拡張を許可しません。 –

+0

すてきで完全な答えをありがとう。 –

関連する問題