A esta pattern se le llama proxied? .call es el método interno [[call]] y al utilizar this se referencia a la función anónima no? Cleaver!
La vi anteriormente para sobrescribir window.alert, andaba buscando como sobrescribirla para substituirla por un componente.
Qué forma más curiosa la de babel. Parece que optimiza la cantidad de código en vez de la performnce no?
Muchas gracias!
Es una IIFE, solo que use call para invocarla. Realmente, en ese código no es necesario usar call. Lo pongo ahí nada más porque puede ser necesario dependiendo del caso.
Por ejemplo:
let obj = { sum : 0 };
obj.fn = function(){
for(let i = 0; i < 5; i++){
this.sum += i;
}
console.log(obj.sum); //10
}
obj.fn();
Y si haces lo que yo hice sin el call:
let obj = { sum : 0 };
obj.fn = function(){
(function(){
for(var i = 0; i < 5; i++){
this.sum += i;
}
})();
console.log(obj.sum); //0
}
obj.fn();
Y con el call te daría 10. Las IIFEs no heredan el contexto de
this y tampoco puedes usar una función flecha porque no existían en ES5. Hay otros casos que también tienes que recordar para que este como lo dice el estándar.
Babel se salta algunas cosas en el estandar ya sea por razones de rendimiento o porque simplemente no lo pueden hacer sin tener un runtime de JS en JS. Por lo general trata de apegarse lo más que pueda al estándar.