Object Literal y los nombres de espacio en javascript
|
Cómo todo el mundo sabe, javscript puede ser un lenguaje muy feo y sólo algunos habían conseguido exprimir la quintaesencia de este lenguaje, como se hacía en dhtmlcentral.com, cuyas librerías han sido toda una ayuda para los que programamos en javascript desde hace años. No obstante, eso fue una etapa y los tiempos cambian, y se han buscado nuevas formas que nos acerquen al tipo de lenguaje orientado a objeto propiamente dicho como es java o más actual, .net. Siempre se ha pensado que era imposible crear clases en javascript, y es así,jaja, pero han buscado formas de imitarlo mediante la creación de objetos, lo que se ha venido a llamar en el mundo anglófono, namespaced javascript o object Literal. Antes de entrar en materia, os haré un resumen de lo que estoy diciendo para que nos entendamos. ANTES: Antes todo eran funciones y entonces siempre podía pasar que si incluíamos 2 archivos de javascript distintos pudieran compartir nombres de funciones similares, y al más frecuentes, variables globales similares, y por lo tanto, ambos scripts dejaban de funcionar. Como mencionaba, en dhtmlcentral.com y en otros sitios, propulsaron una forma propia de javascript de crear pseudo-classes, se hacía así: function bola() { this.moverx=moverx; this.movery=movery; } function moverx() { } function movery() { } nuevaBola=new bola(); O sea creábamos un objeto, que tenía asociado unos pseudo-métodos, pero el problema de que otro script tuviera una función con el mismo nombre seguía ahí.Había que fastidiarse. AHORA: Hoy día, con el surgimiento de Ajax se le está dando mucho bombo a otra forma de imitar las clases, y no es algo nuevo, pero lo cierto es que es cada vez más frecuente. La "nueva forma", el javascript con nombre de espacio, no crea clases, crea objetos a los que se les añade propiedades, que van a hacer las veces de variables locales por su puesto públicas (aquí no hay distinciones del tipo privada o protegida) y métodos, métodos que no van a poder pisarse por otros scripts, aunque por supuesto nada de métodos con la propiedad override ni sealed ni nada que se le parezca. Es un truco, no una solución final. Si has llegado hasta aquí, y no sabes de que estoy hablando, este ejemplo te haré comprender: myscript=new Object(); myscript.current=1; myscript.init=function(){ // some code } myscript.validate=function(){ // some code } Otro ejemplo con el código más resumido, no voy a decir más elegante, pero mejor para tener todo en un sólo bloque: myscript={ current:1, init:function(){ // code }, validate:function(){ // code } } Por lo tanto, os animo aquello que hayáis tenido la suerte o la desgracia de llegar hasta aquí que para cuando tengáis tiempo en el trabajo de programar bien javascript y sea un proyecto algo complejo o reutilizable, cojáis las riendas de los nombres de espacio en javascript y empecéis a crear objetos. |
