中我有一個類Gadget
一個方法consider
定義爲:調用類方法的WebSocket對象
function Gadget() {
this.consider = function (arg) {
alert(arg);
};
if ("WebSocket" in window) {
var ws = new WebSocket(...);
// the rest truncated
ws.onmessage = function (evt) {
consider(evt.data);
};
}
}
我,但是,無法得到consider
的工作,因爲它沒有一個TypeError
。
Uncaught TypeError: Object #<Gadget> has no method 'consider'
如果我嘗試使用this.consider
相反,TypeError
發生與的WebSocket對象。如果我嘗試parent.consider
,那麼對象對象給我提供了同樣的錯誤。
現在我的解決方法是使用從聲明的實例方法,如:
var player = new Gadget();
與player.consider(evt.data)
代替。我不喜歡這樣做,但它有效。我如何重新排列代碼,使其不依賴於對象的已定義實例?
'var self = this; ws.onmessage = function(evt){self.consider(evt.data);};' – Passerby
這會讓它在函數內可訪問,我猜?嗯,謝謝! – icedwater