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?

questionAnswers(3)

yourAnswerToTheQuestion