Aplicaciones de objetos ECMAScript

La creación y destrucción de objetos ocurren durante la ejecución de JavaScript, entender el significado de este paradigma es crucial para entender todo el lenguaje.

Declaración e instanciación

La forma de crear un objeto es usar la palabra clave new seguida del nombre de la clase que se va a instanciar:

var oObject = new Object();
var oStringObject = new String();

La primera línea de código crea una instancia de la clase Object y la almacena en la variable oObject. La segunda línea de código crea una instancia de la clase String y la almacena en la variable oStringObject. Si el constructor no tiene parámetros, los corchetes no son necesarios. Por lo tanto, se puede escribir de la siguiente manera las dos líneas anteriores:

var oObject = new Object;
var oStringObject = new String;

Referencia de objeto

En el capítulo anterior, hemos presentadoConcepto de tipo de referencia. En ECMAScript, no se puede acceder a la representación física de un objeto, solo se puede acceder a la referencia del objeto. Cada vez que se crea un objeto, lo que se almacena en la variable es la referencia del objeto, no el objeto en sí.

Desreferenciación de objetos

ECMAScript tiene una rutina de recolección de basura (garbage collection routine) inútil, lo que significa que no es necesario destruir explícitamente los objetos para liberar memoria. Cuando ya no hay referencias a un objeto, se dice que el objeto ha sido desreferenciado. Al ejecutar la rutina de recolección de basura, todos los objetos desreferenciados se destruyen. Cada vez que un función ejecuta su código, la rutina de recolección de basura se ejecuta para liberar todas las variables locales, y también se ejecuta en algunas otras situaciones imprevistas.

Establecer todas las referencias del objeto en null puede forzar la eliminación del objeto. Por ejemplo:

var oObject = new Object;
// Hacer algo con el objeto aquí
oObject = null;

Después de establecer oObject en null, la referencia al primer objeto creado ya no existe. Esto significa que el siguiente programa de recolección de basura de almacenamiento en desuso destruirá el objeto.

Después de usar un objeto, es una buena práctica eliminarlo para liberar memoria. Esto también asegura que no se utilicen objetos que ya no son accesibles, evitando errores de diseño en el programa. Además, los viejos navegadores (como IE/MAC) no tienen un programa de recolección de basura de almacenamiento en desuso completo, por lo que al cerrar la página, los objetos pueden no ser destruidos correctamente. Eliminar el objeto y todas sus características es la mejor manera de asegurar un uso correcto de la memoria.

Nota:Cuidado al eliminar todas las referencias del objeto. Si un objeto tiene dos o más referencias, para eliminar correctamente el objeto, debe establecer todas sus referencias en null.

Enlace temprano y tardío

El enlace (binding) es el método de combinar la interfaz del objeto con la instancia del objeto.

El enlace temprano (early binding) se refiere a definir las propiedades y métodos del objeto antes de instanciarlo, de modo que el compilador o el programa de interpretación puedan convertir anticipadamente el código a máquina. En lenguajes como Java y Visual Basic, con el enlace temprano, se puede usar IntelliSense (función que proporciona a los desarrolladores una lista de propiedades y métodos del objeto) en el entorno de desarrollo. ECMAScript no es un lenguaje de tipo fuerte, por lo que no admite el enlace temprano.

Por otro lado, el enlace tardío (late binding) se refiere a que el compilador o el programa de interpretación no conocen el tipo del objeto antes de ejecutarse. Al usar el enlace tardío, no es necesario verificar el tipo del objeto, solo verificar si el objeto admite propiedades y métodos. Todas las variables de ECMAScript utilizan el método de enlace tardío. Esto permite realizar una gran cantidad de operaciones de objetos sin penalización alguna.