javascript class mootools scope

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