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