Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

791
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda