中我有一个类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