javascript - Alcance variable de la clase Mootools
class scope (2)
Toma esta clase:
var MyClass = new Class({
Implements: [Events, Options],
initialize: function() {
this.a = 1;
},
myMethod: function() {
var mc = new differentClass({
events: {
onClick: function() {
console.log(this.a); // undefined (should be 1, 2, 3 etc)
this.a ++;
}
}
});
}
});
¿Cómo guardo el valor de esto.a ? Básicamente estoy tratando de trazar una línea (utilizando lienzo) desde el último punto hasta las coordenadas que acabo de hacer clic.
[EDITAR]
No quiero vincular this
ya que aparentemente es malo y anulará las differentClass
opciones de clase.
Puede referir el contexto adecuado de esta manera:
...
myMethod: function() {
var _this = this;
var mc = new differentClass({
events: {
onClick: function() {
console.log(_this.a);
_this.a ++;
}
}
});
}
...
varios patrones están disponibles.
decorador a través de .bind()
var mc = new differentClass({
events: {
click: function() {
console.log(this.a);
this.a ++;
}.bind(this) // binds the scope of the function to the upper scope (myclass)
}
});
manteniendo una referencia.
var self = this; // reference parent instance of myClass
var mc = new differentClass({
events: {
click: function() {
console.log(self.a);
self.a ++;
}
}
});
apuntando a un método myClass que puede manejarlo:
handleClick: function() {
this.a++;
},
myMethod: function() {
var mc = new differentClass({
events: {
click: this.handleClick.bind(this)
}
});
}
el 2do uno: al almacenar una referencia es preferible debido a la menor huella y soporte universal, mientras que .bind
no está disponible en todos los navegadores y debe ser recortado, así como el tiempo adicional para curry la función en la ejecución.
self
es lo que encontrarás en mootools-core en sí cuando sea posible.
si el rendimiento no está en riesgo, el método 3 probablemente pueda ofrecer la mejor legibilidad y la mejor estructura de códigos. los argumentos para el método seguirán siendo lo que pase el manejador de clics, es decir, event
y event
event.target
será el controlador.
en el patrón n. ° 2 con self
, this
apuntará al manejador de clics dentro de la función anónima (o a la otra clase, por ejemplo), que también puede ser útil: el contexto de reenlace puede ser una molestia en el cuello