javascript - es6 - El contexto de invocación(this) de la llamada a la función forEach
javascript foreach break (4)
Dentro de cada uno, this
refiere al objeto window
global. Este es el caso incluso si lo llamas desde un objeto diferente (es decir, uno que has creado)
window.foo = ''window'';
var MyObj = function(){
this.foo = ''object'';
};
MyObj.prototype.itirate = function () {
var _this = this;
[''''].forEach(function(val, index, arr){
console.log(''this: '' + this.foo); // logs ''window''
console.log(''_this: '' + _this.foo); // logs ''object''
});
};
var newObj = new MyObj();
newObj.itirate();
// this: window
// _this: object
Me preguntaba cuál es el valor ''this'' (o contexto de invocación) de la función de devolución de llamada forEach. Este código no parece funcionar:
var jow = [5, 10, 45, 67];
jow.forEach(function(v, i, a){
this[i] = v + 1;
});
alert(jow);
Gracias por explicármelo.
MDN dice:
array.forEach (devolución de llamada [, thisArg])
Si se proporciona un parámetro thisArg a forEach, se utilizará como este valor para cada invocación de devolución de llamada como si se llamara callback.call (thisArg, element, index, array). Si thisArg no está definido o es nulo, este valor dentro de la función depende de si la función está en modo estricto o no (valor pasado si está en modo estricto, objeto global si está en modo no estricto).
En resumen, si solo proporciona la devolución de llamada y está en modo no estricto (el caso que presentó), será el objeto global (ventana).
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
Si no pasa el segundo parámetro a forEach
, this
apuntará al objeto global. Para lograr lo que estabas tratando de hacer
var jow = [5, 10, 45, 67];
jow.forEach(function(v, i, a) {
a[i] = v + 1;
});
console.log(jow);
Salida
[ 6, 11, 46, 68 ]
Terminé la construcción del método forEach y quería compartir este diagrama con todos, espero que ayude a alguien más a tratar de entender su funcionamiento interno.