javascript: prototipos con devoluciones de llamada y 'esto'
He creado una clase basada prototipoPerson
que abre una conexión WebSocket y define las funciones de devolución de llamada como métodos prototipo.
Porque dentro de la devolución de llamadathis
se referirá al objeto WebSocket. Usé otra variable para aferrarme a laPerson
esthis
. Sin embargo, cuando trato con varias instancias, la variable se sobrescribe.
Aquí hay un pequeño recorte que muestra el 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>
Si mas de unoPerson
se crea, luego, al intentar enviar un mensaje a través del socket, aparece el siguiente error:
Error no detectado: INVALID_STATE_ERR: Excepción DOM 11
Asi que parece queself
Se define globalmente y mi intento de obtener un identificador de laPerson
esthis
dentro de la devolución de llamada falla. ¿Alguna sugerencia sobre cómo lograr eso?