Ofuscar código

Si por cualquier razón te interesa que tu código sea lo menos legible posible, puedes utilizar compresores/ofuscadores, como el packer de Dean Edwards, ShrinkSafe, del proyecto Dojo o YUI Compressor de Yahoo, estos harán tu código prácticamente indescifrable.

Si quieres complicarlo un poquito más, los métodos getDeclaredClass, getImplementedClass y getSuperClasses también pueden serte de utilidad.
Lo podemos ver en el siguiente código.


var myClass1 = Class.create("Potato",function(){

	 this.Inside = Class.create(this.$$className + "::public.Chips",function(){
		var value = "OK";
		this.getValue = function(){
			return value;
		};
		this.$$constructor = function(){
		};
	 });
	 
	 this.$$constructor = function(){
	 };
});

var myClass2 = Class.extend("BCR", myClass1,function(){
		this.$$constructor = function(){
		};
});

var inst2 = new myClass2();
alert(new inst2.Inside().getValue());//OK
alert(Class.getDeclaredClasses()); // potato,BCR

Como puedes ver aunque el código funciona correctamente, la información que nos devuelve getDeclaredClasses es errónea, solamente tienes que tener cuidado con $$className y no utilizar esta propiedad para comprobar si un instancia pertenece a una clase determinada.


var myClass1 = Class.create("Potato",function(){

	 this.Inside = Class.create(this.$$className + "::public.Chips",function(){
		var value = "OK";
		this.getValue = function(){
			return value;
		};
		this.$$constructor = function(){
		};
	 });
	 
	 this.$$constructor = function(){
	 };
});

var myClass2 = Class.extend("BCR", myClass1,function(){
		this.$$constructor = function(){
		};

});

var inst2 = new myClass2();

alert(inst2.$$className  ==  "myClass2");// false error
alert(inst2.$$class == myClass2);// true OK