Seleccionar página

En el interesante artículo La función que no lo era, de Javier Vélez Reyes, se hace patente una singular e importante diferencia entre la tradicionales function y las arrow function. Sin duda Javier ha dado en el clavo sobre una de las principales diferencias entre ambos modelos y pone de manifiesto la importancia de conocer que ambos modelos no son equivalentes e intercambiables, ya que el uso de uno u otro tiene consecuencias muy significativas en la contextualización de this.

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. Es primer lugar debemos descartar algunas estrategias, que aunque parezcan evidentes, no van a funcionar en ningún caso:

var f = function () { return 1; };
var g = () => 1;

console.log (
    f === g,
    typeof (f) === typeof (g),
    f instanceof Function,
    g instanceof Function
);

Todos estos intentos de comparar una función tradicional y una función flecha no ofrecen una solución válida. Tenemos dos métodos para conocer si una función ha sido construida de la forma tradicional o como función flecha:

Prototype

El primer método es preguntar por el prototipo de la función en cuestión. Las arrow function no tienen prototipo y por lo tanto typeof de esta propiedad devuelve el undefined. Podemos aprovechar esta característica para escribir una breve y sencilla función isArrowFunction:

function isArrowFunction(x) {
    return typeof x.prototype === 'undefined';
}

var f = function () { return 1; };
var g = () => 1;

console.log('isArrowFunction(f) = ', isArrowFunction(f));
console.log('isArrowFunction(g) = ', isArrowFunction(g));

toString

El segundo método es analizar el código de la función por medio del método toString() que tienen todos los objetos en Javascript y, cómo las funciones también son objetos, podemos utilizar para las funciones y funciones flecha. Las funciones tradicionales empiezan siempre con el texto 'function' y las funciones flecha no. Podemos aprovechar esta característica para rescribir nuestra función isArrowFunction:

function isArrowFunction(x) {
    return x.toString().indexOf('function') !== 0;
}

var f = function () { return 1; };
var g = () => 1;

console.log('isArrowFunction(f) = ', isArrowFunction(f));
console.log('isArrowFunction(g) = ', isArrowFunction(g));

Aunque no son evidentes, tenemos dos formas de conocer si una función ha sido construida de la forma tradicional o como función flecha, por lo que nuestras librerías o framework pueden establecer algún tipo de medida defensiva ante los comportamientos no deseados del uso de funciones flecha al no tener en cuenta el funcionamiento de this en este tipo de funciones.

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.

Obtener todas las propiedades de un objeto

¿Cómo podemos obtener absolutamente todas las propiedades de un objeto? No disponemos de un método nativo para este propósito, pero en unas pocas lineas podemos construir una función para nuestro propósito.