He creado un prototipo basado en la clase Person
que abre una conexión WebSocket y define las funciones de devolución de llamada como métodos prototipo.javascript: prototipos con devoluciones de llamada y 'esto'
Debido dentro de la devolución de llamada this
se referirá al objeto WebSocket utilicé otra variable de aferrarse a la Person
's this
. Sin embargo, cuando trato con varias instancias, la variable se sobrescribe.
Aquí está una pequeña cortada con tijeras que muestra el 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
Si se crea más de un Person
, a continuación, al intentar enviar un mensaje a través del enchufe me sale el siguiente error:
Uncaught Error: INVALID_STATE_ERR: DOM Exception 11
Parece que self
se define globalmente y mi intento de obtener un control Person
this
dentro de la devolución de llamada falla. ¿Alguna sugerencia sobre cómo lograr eso?
Es necesario para declarar que es un 'var' en primer lugar, entre otras cuestiones – qwertymk
@qwertymk' var' hace que sea local para el constructor, que es otro problema – unexplored