javascript: prototypy z callbackami i „this”

Stworzyłem klasę opartą na prototypiePerson otwiera połączenie WebSocket i definiuje funkcje wywołania zwrotnego jako metody prototypowe.

Ponieważ wewnątrz wywołania zwrotnegothis będzie odwoływać się do obiektu WebSocket. Użyłem innej zmiennej, aby trzymać sięPersonjestthis. Jednak gdy mam do czynienia z wieloma instancjami, zmienna zostaje nadpisana.

Oto mały fragment, który pokazuje problem:

<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>

Jeśli więcej niż jedenPerson jest tworzony, a następnie podczas próby wysłania wiadomości przez gniazdo pojawia się następujący błąd:

Nieprzechwycony błąd: INVALID_STATE_ERR: wyjątek DOM 11

Wydaje się, że takself jest zdefiniowany globalnie i moja próba uzyskania uchwytuPersonjestthis wewnątrz wywołania zwrotnego nie powiedzie się. Jakieś sugestie, jak to osiągnąć?

questionAnswers(3)

yourAnswerToTheQuestion