Definir propiedades de un objeto en JavaScript

ECMAScript 5 dispone de un par de APIs que nos permite afectar la forma como interactuamos con los objetos que creamos, permitiéndonos especificar getters y setters, evitar la enumeración de propiedades, eliminar propiedades, e incluso prevenir la extensión de objetos (adición/modificación de propiedades), es decir que podemos ejercer un mayor control sobre ellos.
Continue reading

Crear un objeto en JavaScript

Objetos en JavaScript

En JavaScript, un objeto sigue la notación “clave” : valor, similar a un Hash o Dictionary en otros lenguajes de programación. Para crear objetos en JavaScript, podemos hacerlo de diferentes maneras, ya sea a través de un Object Literal, mediante el método Object.create o por instanciación con el operador new.

Recordemos que JavaScript es un lenguaje basado en prototipos, lo cual quiere decir que todos los objetos que usemos se basan en un objeto pre-existente que le sirve de prototipo (o plantilla). ⭐ Vea más sobre éste tema en el artículo POO en JavaScript – Prototipos.
Continue reading

Lazy Function Definition Pattern

Patrones de diseño Ésta técnica, permite explotar una de las mejores características de JavaScript, los closures on-demand, con la cual podemos crear un closure la primera vez que se invoca una función, dándonos la ventaja de crear un caché, crear un estado interno privado, reducir operaciones complejas, etc. 🙄 Pero así como tiene ventajas, éste patrón de diseño tiene desventajas que debemos conocer.

Una de las ventajas que se logra con ésta técnica, es que se puede mejorar el rendimiento de las funciones, cuando en ellas se realizan operaciones constantes que siempre arrojan el mismo resultado, ya que se crea un cache con el resultado de cada operación efectuada. Y la otra gran ventaja es que al ser on-demand, el closure y la caché sólo se crearán cuando se invoque por primera vez la función; a ésta técnica se le conoce como lazy load o lazy evaluation.

Continue reading

Closures en JavaScript

Closures
“Un closure es un tipo especial de objeto que combina dos cosas: una función, y el entorno en que se creó esa función. El entorno está compuesto por las variables locales que están dentro del scope en el momento en que el closure fue creado” — MDN. Es decir que una función definida dentro del closure recuerda el entorno donde se creó y tiene acceso a las variables de ese entorno (variables libres).

Continue reading

Clonando objetos en JavaScript

Valores primitivos y objetos

Cuando programamos, es usual invocar funciones y pasar argumentos, sin embargo es posible que no conozcamos el manejo que le da JavaScript a esos parámetros, motivo por el cual a veces obtenemos resultados inesperados.

💡 Primero que todo vamos a aclarar los términos argumetos y parámetros:

  • argumetos hace referencia a los valores que le enviamos a una función.
  • parámetros hace referencia a los valores que recibe la función y son especificados en la firma de la función.
    // a y b son los parámetros de suma
    function suma (a, b) {
        return a + b;
    }

    var x = 5;

    // x y 8 son los argumentos enviados a suma
    var r = suma(x, 8);

⭐ Al enviar argumentos con valor primitivo (string, number, boolean, null, undefined), el parámetro de la función que recibe el valor crea una copia by value.
Esto significa que cualquier cambio que hagamos sobre ese parámetro, sólo será válido dentro de la función y no afectará al argumento original. Veamos el siguiente ejemplo:

Continue reading

¿Sabías esto de JavaScript?

JavaScript logo
JavaScript es un lenguaje de programación interpretado*, definido como orientado a objetos basado en prototipos (class-less), imperativo, débilmente tipado y dinámico.

JavaScript sigue algunos de los principios de la programación orientada a objetos, con un enfoque prototipado en donde los objetos ya existentes pueden servir de prototipo para los que se necesite crear. Además del paradigma OOP, JavaScript también permite trabajar el paradigma de programación funcional.

Características como funciones variádicas (número indefinido de parámetros en una función), tipos de datos dinámicos, hoisting, coerción, entre otros, hacen que JavaScript sea un lenguaje muy flexible y permisivo, por lo que es mejor conocer los principios del lenguaje para evitar cometer errores y caer en malas prácticas.
Continue reading

POO en JavaScript – Prototipos

OOP in JS
JavaScript es un lenguaje de programación interpretado*, definido como orientado a objetos basado en prototipos (class-less), imperativo, débilmente tipado y dinámico.

JavaScript sigue algunos de los principios de la programación orientada a objetos, con un enfoque prototipado en donde los objetos ya existentes pueden servir de prototipo para los que se necesite crear. Además del paradigma OOP, JavaScript también permite trabajar el paradigma de programación funcional.

Continue reading

¿Qué son las funciones variádicas?

Funciones variádicas en JavaScript

Esta es otra de las características que hacen flexible a este lenguaje de scripting.
En JavaScript no se necesita ningún truco especial como la sobrecarga de métodos (overload) para hacer que la misma función reciba un número diferente de argumentos, ya que disponemos de la variable local arguments, la cual está disponible dentro del body de las funciones (excepto Arrow functions) y contiene la referencia a cada uno de los argumentos enviados a la función.

Una función variádica es una función de aridad indefinida, es decir, que acepta una cantidad de argumentos variable.

Continue reading

Coercion en JavaScript

¿Que es coerción?

Se podría decir que coerción es la acción de forzar a que un objeto se comporte como si fuera de otro tipo. Sin lugar a dudas, éste es uno de los aspectos más interesantes de JavaScript. Al ser un lenguaje débilmente tipado y dinámico, no es necesario especificar el tipo de dato para las variables porque el tipo está asociado al valor (duck typing), esto hace que en tiempo de ejecución podamos cambiar el valor de las variables sin ningún problema.
Continue reading

Hoisting en JavaScript

Hoisting

En la mayoría de los lenguajes de programación, el ámbito/alcance/scope de una variable está en el bloque donde fue definida (block-level scope), por ejemplo, dentro de un bloque if, for, while; sin embargo en JavaScript (ECMAScript 5.1) esto no es así, puesto que el alcance de una variable está en la función en donde fue declarada (function-level scope).

¿Qué es hoisting?

El hoisting o “elevamiento” es una de las particularidades de JavaScript y ocurre cuando declaramos una variable dentro de una función (su scope), entonces el intérprete* interno mueve la declaración (creación) de la variable al inicio de la función.
Continue reading