Static I.
Los métodos y atributos estáticos, nos permite tener acceso a estos sin tener que crear ninguna instancia.
Un atributo estático es común para todas las instancias de la clase.
function ClassA(){
var message = "ClassA";
this.getMessage = function(){
return message;
};
this.setMessage = function(msg){
message = msg;
};
// constructor de la clase
this.$$DEFINE_STATIC = function(){
this.$$static.instances = [];
};
this.$$constructor = function(msg){
message = msg || message;
this.$$static.instances.push(this);
};
};
var ClassA = Class.create("ClassA",ClassA);
var inst1 = new ClassA("1");
var inst2 = new ClassA("2");
alert(inst1.$$static.instances.length + " " + inst2.$$static.instances.length)// 2 2
alert(ClassA.$$static.instances.length); // 2
Para declarar atributos y métodos estáticos debemos declararlo dentro de la función reservada $$DEFINE_STATIC, dentro utilizaremos $$static para declarar los atributos y métodos estáticos, estos serán públicos, es posible declarar atributos y métodos privados y estáticos, pero sólo tendremos acceso a ellos mediante un método estático y público.
Los métodos estáticos por defecto sólo trabajan correctamente con otros métodos y atributos estáticos.
Mediante los métodos $apply y $call, podremos trabajar también con métodos y atributos públicos.
function ClassA(){
var message = "ClassA";
this.getMessage = function(){
return message;
};
this.setMessage = function(msg){
message = msg;
};
// constructor de la clase
this.$$DEFINE_STATIC = function(){
this.$$static.instances = [];
this.$$static.setMessage = function(msg){
this.setMessage(msg);
};
};
this.$$constructor = function(msg){
message = msg || message;
this.$$static.instances.push(this);
};
};
var ClassA = Class.create("ClassA",ClassA);
var inst1 = new ClassA("1");
var inst2 = new ClassA("2");
inst1.$$static.setMessage("Hi!!");
inst2.$$static.setMessage.$call(inst2,"Hi!!");
alert(inst1.getMessage()); // 1
alert(inst2.getMessage()); // Hi!!
$apply y $call trabajan igual que los métodos nativos apply y call.