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.