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

Debate: Tecnologías de Front Web [vídeo]

Desde las principales comunidades de desarrollo de tecnologías de front (Madrid JS, Polymer Madrid, Angular Madrid y VueJS Madrid) se ha organizado este debate que pretende ser un ejercicio de sentido común en relación a las tecnologías de front actuales centradas en componentes.

El microservicio más grande del mundo [vídeo]

en esta interesante charla, Felipe Polo nos cuenta cómo un servicio puede crecer manteniendo su status “micro”, manteniendo su coherencia y orden, para resolver un problema de migración desde una aplicación monolítica hasta un sistema basado en microservicios.

Web Assembly workshop by Dan Callahan [video]

Este taller (en inglés) nos adentra en WebAssembly, cómo funciona y cuándo debe usarlo. También se describe cómo usar las herramientas de creación de perfiles. Esta nueva herramienta de bajo nivel y alto rendimiento está emergiendo con fuerza y debes conocerla.

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.