javascript: protótipos com callbacks e 'this'
Eu criei uma classe baseada em protótiposPerson
que abre uma conexão WebSocket e define funções de retorno de chamada como métodos de protótipo.
Porque dentro do retorno de chamadathis
vai se referir ao objeto WebSocket eu usei outra variável para segurar oPerson
'sthis
. No entanto, quando eu lido com várias instâncias, a variável é sobrescrita.
Aqui está um pequeno recorte que mostra o problema:
<code>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 </code>
Se mais de umPerson
é criado, então ao tentar enviar uma mensagem através do socket eu recebo o seguinte erro:
Erro não detectado: INVALID_STATE_ERR: exceção do DOM 11
Então parece queself
é definido globalmente e minha tentativa de obter uma alça para oPerson
'sthis
dentro do retorno de chamada falha. Alguma sugestão sobre como conseguir isso?