2011-02-08 137 views
2

我想擴展現有的XMLHttpRequest對象,以便它可以與所有瀏覽器一起工作。現在我一直在JS inheritance和東西槽但是在開始之前,我想看看它的好例子。如何在JavaScript中擴展XMLHttpRequest對象?

HTML5有上傳和進度事件的東西,我想實現繼承的新對象,即使該功能不支持不通過向客戶端引入JS錯誤,可以行爲。所以我想實現這樣的事情。

Class XMLHttpRequest{} 
Class UploadXMLHttpRequest: XMLHttpRequest{} 

其中可以將附加方法附加到UploadXMLHttpRequest類,如下所示。

UploadXMLHttpRequest.prototype.uploadFile = function(file){ 

} 

考慮YUI,jQuery和其他人在市場好的沒有人真的想這樣做,這使得它有點困難,我找到很好的資源。

+0

不可持續的目標,因爲並非所有的瀏覽器都有XMLHttpRequest類。並不是所有的瀏覽器,我的意思是Internet Explorer。你所要做的就是使用那些'good in market'庫,並使用他們的包裝來做你的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第三版),主機 對象被允許做事情,沒有 其他對象甚至可以夢想。爲了 報價相關部門[8.6.2]

主機對象可以實現與任何 實現相關的行爲,這些 內部方法,或 它可能是一個主機對象 只實現了內部的一些方法 而不是其他。

這也意味着,主機對象可以通過使用prototype不允許擴展。

但是,作爲Kangax也advices,你可以創建一個圍繞XMLHttpRequest的包裝,並做任何你喜歡它。

+1

我完全同意,並且會寫出類似的答案。另外,ActiveX'XMLHttpRequest'對象(如IE中可用的,並且優先於jQuery中的本機'XMLHttpRequest'對象)肯定不允許擴展。 –

+0

感謝您提供完美的答案。 –