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ęPerson
jestthis
. 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 uchwytuPerson
jestthis
wewnątrz wywołania zwrotnego nie powiedzie się. Jakieś sugestie, jak to osiągnąć?