Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

783
Views
Cómo hacer una llamada de función usando 'esto' dentro del ciclo forEach

En el siguiente objeto, tengo un problema al usar la referencia 'esto':

 function SampleObject(){ this.addObject = function(object){...} ... // more code here ... this.addNewObjects= function(arr){ arr.forEach( function (obj) { this.addObject(new Obj(obj.prop1, obj.prop2)); }); } }

Supongo que el contexto está cambiando y que 'esto' se refiere al 'obj' iterado, y no a 'SampleObject'. Resolví el problema usando un bucle for normal, sin embargo, tengo curiosidad por saber por qué esto no funciona y me gustaría saber si hay otra forma de hacerlo.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede almacenar esto en la variable:

 var self = this; this.addNewObjects = function(arr){ arr.forEach(function(obj) { self.addObject(new Obj(obj.prop1, obj.prop2)); }); }

o usa enlazar:

 this.addNewObjects = function(arr) { arr.forEach(function(obj) { this.addObject(new Obj(obj.prop1, obj.prop2)); }.bind(this)); }

Y nota al margen, sin ellos, this será un objeto de ventana, no obj. This es siempre un objeto que se creó usando una palabra clave nueva o un objeto de ventana si es una función normal. En modo estricto this será indefinido en este caso.

ACTUALIZACIÓN : y con ES6 puede usar la función de flecha:

 this.addNewObjects = function(arr) { arr.forEach((obj) => { this.addObject(new Obj(obj.prop1, obj.prop2)); }); }

Las funciones de flecha no tienen su propio this y lo obtienen del alcance externo.

ACTUALIZACIÓN2 : del comentario de @viery365 puede usar esto como segundo argumento para forEach y creará contexto para la función:

 this.addNewObjects = function(arr) { arr.forEach(function(obj) { this.addObject(new Obj(obj.prop1, obj.prop2)); }, this); }

Puedes leer esto en MDN para cada página

over 4 years ago · Santiago Trujillo Report

0

 const array1 = [ {name : "john", age: 20}, {name : "sarah", age: 70} ]; array1.forEach(element => this.print(element)); print = (data) => { console.log(data.name); } // expected output: "john" // expected output: "sarah"

Hay una mejor manera de hacer esto

 array.forEach(obj => this.functionName(params));

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!