Seleccionar página

Las de propiedades de los objetos se crean y utilizan con facilidad en Javascript, pero se suelen desconocen algunas de sus más interesantes características que nos pueden permitir un mayor control sobre ellas. En este mismo sentido, los métodos de Object son unos grandes desconocidos. Son soportados por todos los navegadores modernos (incluido IE9), pero siguen siendo poco aprovechados. Varios de estos métodos nos van a ayudar a entender las principales características de las propiedades de los objetos en Javascript y sacarles todo el partido.

Veamos la diferencia entre las propiedades propias y las propiedades heredadas. Las propiedades propias son las creadas directamente en un objeto. Cuando las propiedades son creadas en el constructor por medio de this o asignadas dinámicamente sobre el objeto, son propiedades propias del objeto, ya que se crean sobre la instancia directa del objeto.

function Triangulo() {
    // Propiedades creadas en el contructor sobre el objeto
    this.a =  60;
    this.b =  60;
    this.c =  60;
}

var equilatero = new Triangulo();
equilatero.tipo = "equilátero"; // Propiedad creada sobre el propio objeto

for (var prop in equilatero) {
    if (!equilatero.hasOwnProperty(prop)) continue;
    console.log(prop); // muestra nada a, b, c y tipo
}

Las propiedades heredadas son creadas en la cadena de prototipos de objeto. Cuando se crean por medio de prototype no pertenecen como tal al objeto y se consideran heredadas.

function Triangulo() {
}
// Propiedades creadas en el prototipo
Triangulo.prototype.a =  60;
Triangulo.prototype.b =  60;
Triangulo.prototype.c =  60;

function Equilatero() {
}
// Aumentar la cadena de prototipos
Equilatero.prototype = Triangulo.prototype;
Equilatero.prototype.tipo = "equilátero";


var equilatero = new Equilatero();

for (var prop in equilatero) {
    if (!equilatero.hasOwnProperty(prop)) continue;
    console.log(prop); // no muestra nada
}

Como se habrá podido observar, for in recorre las propiedades propias y heredadas de un objeto y por medio de hasOwnProperty podemos diferenciar unas de otras.

La recomendación de utilizar hasOwnProperty en los bucles for in viene dada por este hecho, ya que si algún paquete o librería poco cuidadosa modifica el prototipo de, por ejemplo, Object, todos nuestros bucles encontrarán esta propiedad y, muy probablemente, tengan un comportamiento no controlado.

function Triangulo() {
    this.a =  60;
    this.b =  60;
    this.c =  60;
}
var equilatero = new Triangulo();
equilatero.tipo = "equilátero";

// Se añade un método a todos los objetos
Object.prototype.debug = function() {
    //...
};

for (prop in equilatero) {
    console.log(prop); // a, b, c, tipo y debug
}

Una forma alternativa para poder obtener sólo las propiedades propias de un objeto es utilizar Object.keys(objeto). Este es un método disponible desde ECMAScript 5.1 y devuelve una matriz con los nombres de las propiedades propias del objeto, sin incluir las propiedades heredadas.

function Triangulo() {
    this.a =  60;
    this.b =  60;
    this.c =  60;
}
var equilatero = new Triangulo();
equilatero.tipo = "equilátero";

Object.keys(equilatero).forEach(function(prop) {
    console.log(prop); // a, b, c y tipo
});

Object.prototype.debug = function() {
    //...
};

Object.keys(equilatero).forEach(function(prop) {
    console.log(prop); // a, b, c y tipo
});

Una ventaja adicional de Object.keys(objeto) es que podemos utilizar los métodos de manejo de matrices como forEach(), filter(), map() o reduce().

Novedades

Desarrollando Skills Alexa con AWS Lambda y node.js por Germán Viscuso

Germán Viscuso, evangelista de la tecnología Alexa para España, nos cuenta en esta charla las posibilidades nos ofrece la tecnología de Amazon para crear Skills personalizados desarrollados en NodeJS y desplegados en Lamdas de AWS. Un nuevo mundo de posibilidades para los desarrolladores.

Native apps with Titanium por Rene Pot

Rene Pot nos cuenta cómo crear apps nativas con Titanium + Alloy y sacar el máximo partido en el desarrollo de aplicaciones nativas desde un único código fuente basado en Javascript.

10 patrones de diseño para Node por Felipe Polo

Los diez patrones de diseño para Javascript presentados por Felipe Polo en esta interesante charla te ayudarán a crear un código más legible, mantenible y comunicativo. Son un buen punto de partida para hacer mejor tus programas.

breves

Descrubir algunas características de console

En el día a día nos encontramos muy a menudo utilizando console. Es una navaja multiusos que nos facilita la vida a la hora de depurar nuestro código. La mayoría de nosotros ha utilizado console.log(), pero tiene otras muchas funcionalidades.

Matrices dispersas o sparse arrays en JS

Una característica que puede producir algunos problemas, si no lo tenemos en cuenta, es la posibilidad de tener matrices con huecos, es decir, con algunos de sus elementos sin definir. Es lo que se suele denominar una matriz dispersa o sparse array. Veamos cómo trabajar con esta características de las matrices.

Algunos operadores de bits usados con asiduidad

Cada día más a menudo podemos encontrar operadores binarios utilizados como formas abreviadas de algunas operaciones que de otra forma sería algo menos compactas y, quizás, más comprensibles. Veamos algunos casos en detalle.

Cómo diferenciar arrow function de function

En un reciente artículo Javier Vélez Reyes hace patente las principales diferencias entre las funciones tradicionales y las funciones flecha, ya que ambos modelos no son equivalentes e intercambiables. Veamos cómo es posible saber si una función ha sido construida por medio de la instrucción function o como una arrow function.