Ho creato una classe basata su prototipo Person
che apre una connessione WebSocket e definisce le funzioni di callback come metodi prototipo.javascript: prototipi con callback e 'this'
Poiché all'interno del callback this
si fa riferimento all'oggetto WebSocket, ho utilizzato un'altra variabile per conservare lo this
Person
. Tuttavia, quando gestisco più istanze, la variabile viene sovrascritta.
Ecco una piccola tagliò che mostra il problema:
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
Se più di un Person
è creato, poi quando si cerca di inviare un messaggio tramite la presa ottengo il seguente errore:
Uncaught Error: INVALID_STATE_ERR: DOM Exception 11
Quindi sembra che lo self
sia definito globalmente e il mio tentativo di ottenere un handle per lo this
this
all'interno del callback non riesce. Qualche suggerimento su come ottenerlo?
È necessario dichiarare di essere un 'var' prima, tra le altre questioni – qwertymk
@qwertymk' var' rende locali al costruttore, che è un altro problema – unexplored