Stworzyłem opartą na prototypach klasę Person
, która otwiera połączenie WebSocket i definiuje funkcje oddzwaniania jako metody prototypowe.javascript: prototypy z wywołaniami zwrotnymi i "tym"
Ponieważ wewnątrz wywołania zwrotnego this
będzie odnosić się do obiektu WebSocket użyłem innej zmiennej do utrzymania Person
's this
. Jednak gdy zajmuję się wieloma instancjami, zmienna zostaje nadpisana.
Oto mały snipped który pokazuje problem:
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
Jeśli więcej niż jeden Person
jest tworzona, a następnie, gdy próbuje wysłać wiadomość za pośrednictwem gniazda pojawia się następujący błąd:
Uncaught Error: INVALID_STATE_ERR: DOM Exception 11
Wygląda na to, że self
jest zdefiniowany globalnie i moja próba uzyskania dojścia do Person
's this
wewnątrz funkcji zwrotnej kończy się niepowodzeniem. Wszelkie sugestie, jak to osiągnąć?
trzeba deklarować, że jest to 'var' pierwsze, wśród innych zagadnień – qwertymk
@qwertymk' var' sprawia, że lokalne do konstruktora, który jest inny problem – unexplored