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 laPersonesthis. 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 laPersonesthis dentro de la devolución de llamada falla. ¿Alguna sugerencia sobre cómo lograr eso?

Respuestas a la pregunta(3)

Su respuesta a la pregunta