我到處尋找,似乎並沒有任何問題,更不用說在那裏回答這個問題。有沒有辦法繼承/繼承/擴展javascript WebSocket?
我試過多種方式,並使用原型繼承好像這將是
function MyWebSocket(url) {
// do other stuff
WebSocket.call(this, url);
}
MyWebSocket.prototype = Object.create(WebSocket.prototype);
MyWebSocket.prototype.constructor = MyWebSocket;
MyWebSocket.prototype.test = function() { alert('hi'); };
我可以指定測試功能單獨就好了最好的方式,但在試圖覆蓋consutructor我得到的錯誤「 TypeError:無法構造'WebSocket':請使用'new'運算符,這個DOM對象構造函數不能作爲一個函數「從chrome調用。
我知道這不是典型的JavaScript函數/對象,但我真的很喜歡重寫WebSocket構造函數來設置其他維護功能,如ping間隔和是的,我可以在onopen中單獨執行此操作函數,但這是我想要在網站上打開的所有WebSocket的全局。
謝謝大家!
那麼,你必須在構造函數中構建一個WebSocket的實例。現在你有了一個選擇:將它聚合爲一個屬性,並通過適配器使用它,或者使用像Object.setPrototypeOf(這個.__ proto__,新的WebSocket(url));''。請注意Safari不支持後者。 – raina77ow
實際上,最好寫成Object.setPrototypeOf(Object.getPrototypeOf(this),new WebSocket(url))'。 – raina77ow
我希望第二種方法能夠工作,但這會導致匿名函數(如事件函數的getter/setter)沒有綁定到WebSocket的問題,所以Chrome會拋出非法調用,並且Firefox會拋出「TypeError:'onmessage'setter調用on沒有實現接口的對象WebSocket「 – JSous