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?