我创建了一个原型基类Person
,它打开一个WebSocket连接并将回调函数定义为原型方法。
因为在回调函数内部this
将指向WebSocket对象,所以我使用另一个变量来保存Person
的this
。然而,当我处理多个实例时,该变量会被覆盖。
这里是一个显示问题的小片段:
function Person(name){
self = this
self.name = name
}
Person.prototype = {
getName : function(){
return self.name
},
openConnection : function(host, port){
self.pointCount = 0
self.ws = new WebSocket("ws://" + host + ":" + port)
self.ws.onopen = self.onOpenConnection
},
onOpenConnection : function() {
console.log(this) // prints the websocket
console.log(self) // prints the person
self.ws.send(self.name) // works only if one person exists
}
}
var p1 = new Person("Jonh")
var p2 = new Person("Adam")
console.log(p1.getName()) // Prints Adam
console.log(p2.getName()) // Prints Adam
p1.openConnection("localhost", 7000) // opens connection for p1
p2.openConnection("localhost", 7000) // opens another connection for p1
如果创建多个Person
,然后尝试通过socket发送消息时出现以下错误:因此看起来Uncaught Error: INVALID_STATE_ERR: DOM Exception 11
self
在全局范围内定义,并且我尝试在回调函数中获取对Person
的this
的引用失败。有什么建议吗?
var
,还有其他问题。 - qwertymkvar
使其局限于构造函数,这是另一个问题。 - unexplored