Objetos en Javascript
Las páginas web tienen su DOM o jerarquía de nodos, que es una representación de su estructura como documento. Dicha estructura es utilizada por Javascript para acceder al documento.
Puedes imaginar a Javascript como el cableado de esa estructura, donde cada parte es accedida hasta donde llega el cableado. En el Javascript moderno, el cableado es bastante completo y ramificado, en versiones más antiguas de Javascript el cableado era más básico. Hoy en dia está tan ramificado que frecuentemente existen varias formas distintas de acceder a un mismo nodo.
JavaScript, además de tener acceso a las diferentes partes del documento web, cuenta con objetos asociados con la ventana del navegador que muestra el documento, como el objeto location, window, navigator, history, y otros. Estos objetos no son considerados parte del DOM pero a veces se solapan, como sucede con el objeto document. Al igual que el DOM, los objetos de JavaScript relacionados con las páginas web forman una jerarquía en forma de árbol, cuyo nodo principal es el objeto window.
Objetos, propiedades, eventos y funciones
Javascript esta estructurado en 4 partes fundamentales, aunque una podriamos considerarla la principal (objetos) y las otras tres son secundarias (propiedades, eventos y funciones) ya que emanan de la parte principal, que son los objetos.
Resumiendo mucho los conceptos, vamos a ver que es cada cosa.
Objetos
En javascript, todos los elementos que lo forman son considerados objetos. Esta es la unidad fundamental de javascript. Todo objeto en javascript está formado por propiedades, eventos y funciones.
Haciendo un simil con el mundo real, imaginemos que javascript es una casa, por ejemplo.
Propiedades
Las propiedades son las caracteristicas que tiene un objeto, a las que se puede acceder. Estas propiedades son de dos tipos: de lectura, y de lectura/escritura. Las propiedades de lectura nos permiten obtener información sobre una caracteristica concreta de un objeto. Las propiedades de lectura/escritura, nos permiten obtener información y además, modificarla.
Volviendo al ejemplo de la casa, una propiedad de sólo lectura podria ser 'Altura de techo'. Esta propiedad nos permitiría obtener información sobre la altura del techo, pero no podriamos cambiarla.
Una propiedad de lectura/escritura podria ser 'estado de la puerta'. Al leer esta propiedad podríamos obtener 'abierta', lo que nos indicaría que la puerta está abierta. Pero podriamos modificar esta propiedad con 'cerrada', con lo que cerraríamos la puerta. (todo esto imaginando que una casa nos hiciese caso, tendría que ser una casa con Domótica jeje)
Eventos
Los eventos son los diferentes estados que puede tener un objeto a lo largo de su existencia. Por ejemplo si hablamos de una imágen que se encuentra en una página web, esta imagen pasaría por varios estados hasta el momento en el que se cargue en la página: El estado de ser llamada por el código de la página, el estado de empezar a cargarse en la página, o el estado de terminar de ser cargada en la página.
Los eventos pueden ser 'capturados', que es como poner un aviso para que cuando suceda dicho evento, se ejecute una función o instrucción determinada. Podríamos capturar el evento de 'carga completada' de la imagen del ejemplo anterior, para que en el momento de finalizar su carga, se ejecute una función que modifique su tamaño, por ejemplo.
Si no se pudiesen capturar los eventos, se crearían problemas como por ejemplo, que tratemos de modificar el tamaño de esa imagen, y que no se haya terminado de cargar todavia en la página, por lo que javascript no podría acceder a sus propiedades (en este caso el tamaño) y esto ocasionaría un ERROR EN TIEMPO DE EJECUCIÓN, cosa que debemos evitar a toda costa.
Por tanto, los eventos nos sirven de ayuda para poder acceder a los objetos en el mejor momento posible.
Funciones e instrucciones
Una instrucción es una linea de código que sirve para realizar una acción determinada. Javascript es un lenguaje que se ejecuta de manera secuencial, esto quiere decir que Javascript va interpretando el código en el orden en el que se lo encuentra, de arriba a abajo, es decir, desde el inicio del archivo que contiene dicho código, hasta el final del archivo.
De manera que si escribimos dos instrucciones, primero se ejecuta la primera instrucción y a continuación la segunda.
Entender esto es importante para evitar los errores en tiempo de ejecución. Debemos ir ejecutando las instrucciones de forma que cada instrucción, nunca haga referencia a nada que ocurra en lineas posteriores a dicha instruccion. No podemos poner instrucciones sin orden ni concierto, por ejemplo una instrucción que quiera acceder al calculo que ha realizado otra instrucción que se encuentra unas lineas más abajo, ya que ese cálculo todavía no ha sido ejecutado por Javascript y tendremos el error asegurado. Lo correcto es ejecutar primero el cálculo, y después acceder a él. Una cosa muy lógica por otra parte, pero que al principio suele provocar errores porque no se tiene en cuenta debidamente.
Puede ser que necesitemos que una instrucción se ejecute no de manera secuencial, sino provocada por nosotros, lo que se llama INVOCAR. Para eso existen las llamadas 'funciones', que no son otra cosa que bloques de instrucciones, bloques a los que se asigna un nombre, y que pueden ser invocados en el momento que determinemos, a traves de ese nombre que hemos puesto al bloque de instrucciones.
Las funciones son conocidas también con el nombre de 'métodos', aunque este segundo nombre viene más asociado a funciones que forman parte de un objeto determinado. Función es el nombre genérico, y lo utilizamos para referirnos a un método asociado a un objeto, o para una función no asociada a un objeto en particular. Digamos que en esencia son lo mismo. Las funciones o métodos suelen llevar un nombre, que utilizamos para invocarlas, pero también pueden ser funciones llamadas 'ánonimas'. Estas funciones no tienen nombre. Suelen utilizarse en determinados contextos, por ejemplo cuando se capturan eventos, en el Javascript moderno son bastante utilizadas.
Las funciones admiten que se les envien parámetros, cosa que las hace mucho más flexibles que una simple instrucción. Esos parámetros son llamados 'argumentos de la función', este envio de parámetros hace posible poder utilizar un bloque de instrucciones bajo diferentes contextos o escenarios, por lo que ayudan a crear código más reutilizable. Pronto aprenderemos más sobre esto.
Conclusión/resumen
Estas clasificaciones son necesarias para entender la estructura del lenguaje aunque a la hora de la práctica realmente todo en JavaScript son objetos. El concepto 'objeto' en JavaScript requiere un capítulo propio, ya que es muy extenso y con amplias posibilidades. En el capítulo siguiente seguiremos ahondando en todos estos conceptos y otros nuevos.