Javascript: Prototypen mit Callbacks und 'this'

Ich habe eine prototypbasierte Klasse erstelltPerson Das öffnet eine WebSocket-Verbindung und definiert Rückruffunktionen als Prototypmethoden.

Weil im Rückrufthis wird auf das WebSocket-Objekt verweisen, für das ich eine andere Variable verwendet habePerson'sthis. Wenn ich jedoch mit mehreren Instanzen arbeite, wird die Variable überschrieben.

Hier ist ein kleiner Ausschnitt, der das Problem zeigt:

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

Wenn mehr als einsPerson erstellt wird, erhalte ich beim Versuch, eine Nachricht über den Socket zu senden, die folgende Fehlermeldung:

Nicht erfasster Fehler: INVALID_STATE_ERR: DOM-Ausnahme 11

So scheint es dasself ist global definiert und mein Versuch, das in den Griff zu bekommenPerson'sthis Innerhalb des Rückrufs schlägt fehl. Irgendwelche Vorschläge, wie man das erreicht?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage