2016-10-31 3 views
0

Я пытаюсь переопределить метод WebSocket.send(). Моя цель - путать отправленные данные, чтобы проверить надежность реализации сервера.Как переопределить метод отправки() WebSocket

Я принимая этот подход:

// OVERRIDE WEBSOCKET SEND METHOD 
WebSocket.prototype.oldSend = WebSocket.prototype.send; 

WebSocket.prototype.send = function(data) { 
    console.log("ws: sending data"); 
    WebSocket.prototype.oldSend(data); 
}; 

Это терпит неудачу, когда команда WebSocket.prototype.oldSend(data) называется в первый раз, с ошибкой: Не удалось отправить: «отправить» называется на объект, который не реализует интерфейс WebSocket.

Кто-нибудь, если можно переопределить встроенный метод отправки websocket(), или что еще мне не хватает?

ТИА

ответ

1

Как насчет:

WebSocket.prototype.oldSend = WebSocket.prototype.send; 

WebSocket.prototype.send = function(data) { 
    console.log("ws: sending data"); 
    WebSocket.prototype.oldSend.apply(this, [data]); 
}; 

JSFiddle

+0

Это похоже на работу. Можете ли вы объяснить, почему? Я предполагаю, что когда вы вызываете 'this.send()' интерпретатор будет искать метод в прототипе в любом случае. Благодарю. – NoUserFound

+0

'WebSocket.prototype.send' не будет работать, потому что этот вызов не вызывает метод' send' в области сокета, а скорее в области его прототипа (это не то же самое, что вы, вероятно, можете сказать из сообщение об ошибке). Вместо этого, если вы попробуете 'WebSocket.prototype.oldSend.apply (это, аргументы)', который также передаст правильную область применения метода, он должен работать так, как вы ожидаете. –

0

Насколько я знаю, вы не можете переопределить реализацию WebSocket.send(), так как он предназначен только для чтения в большинстве браузера.

Все, что вы можете сделать что-то вроде:

var mysend = function(data) { 
    console.log("ws: sending data"); 
    WebSocket.send(data); 
}; 

, который должен сделать трюк в любом случае, не мешая с прототипами.

Смежные вопросы