Sin codificar la cadena, 'foo', ¿cómo puedo modificar el código anterior para que imprima 'foo 1', 'foo 2' y 'foo 3' cada uno en líneas separadas?
const obj = { x: 'foo', f: function() { [1, 2, 3].forEach(function(num) { console.log(this.x, num); }); } } obj.f();Las declaraciones clásicas de "función" se vincularán al entorno "este" de la persona que llama en lugar de como lo hacen la mayoría de los idiomas. Tradicionalmente, esto se puede arreglar con el método bind en una función de la siguiente manera:
const obj = { x: 'foo', f: function() { [1, 2, 3].forEach(function(num) { console.log(this.x, num); }.bind(this)) } };El enfoque más simple es simplemente usar la nueva sintaxis de flecha, que vinculará la función como se esperaría naturalmente.
Esta línea:
[1, 2, 3].forEach(function(num) {A esto:
[1, 2, 3].forEach((num)=> {const obj = { x: 'foo', f: function() { [1, 2, 3].forEach(function(num) { console.log(`${obj.x} ${num}`); }); } } obj.f();