我创建了一个基于原型的类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
创建了多个,则在尝试通过套接字发送消息时出现以下错误:
未捕获的错误:INVALID_STATE_ERR:DOM 异常 11
所以它似乎self
是全局定义的,我试图在回调中获取Person
' 的句柄失败了。this
关于如何实现这一目标的任何建议?