una tablas tabla recorrer obtener objetos lista funciones dinamicas datos con array agregar javascript foreach

javascript - tablas - para cada función dentro del objeto



recorrer array de objetos javascript (3)

Tengo una pregunta sobre este fragmento de código.

var names = ["John", "Jen", "Tony"]; var obj = { prob: function () { for (var i = 0; i < names.length; i++) { document.write(names[i]); console.log(names[i]); } }, trim: names.forEach(function(name) { document.write(name) console.log(name) }) } console.log("*********") console.log(obj.prob()); console.log("*********")

Si ejecuto este código en mi consola, obtendré esto:

John Jen Tony ********* John Jen Tony undefined *********

Eso significa que antes de que se ejecute mi función de problema que llamo mi función de recorte. ¿Porqué es eso? Yo no lo llamé? ¿Puedo guardarlo como un método en un objeto y llamarlo más tarde cuando lo necesito?


Explicación de este comportamiento:

obj.prob se le asigna una declaración de función y no se invoca.

obj.trim establece una llamada a la función forEach .

Esto significa que cuando se asigna a la propiedad también está causando que se ejecute el código (esto sucede cuando crea una instancia del objeto obj , lo que explica el registro inicial de nombres)

Solución sugerida:

Envuelva la invocación de forEach en una declaración de función anónima (tal como lo hizo con el bucle for para la propiedad prob ):

var names = ["John", "Jen", "Tony"]; var obj = { prob: function () { for (var i = 0; i < names.length; i++) { document.write(names[i]); console.log(names[i]); } }, // the code in this function block will only run // when trim is invoked trim: function(){ names.forEach(function(){ document.write(name); console.log(name) }); } };


Los names.forEach se llaman tratando de asignar el valor de retorno a trim . Ponerlo dentro de una función debería funcionar.

var names = ["John", "Jen", "Tony"]; var obj = { prob: function () { for (var i = 0; i < names.length; i++) { document.write(names[i]); console.log(names[i]); } }, trim: function () {names.forEach(function(name) { document.write(name) console.log(name) })} } console.log("*********") console.log(obj.prob()); console.log("*********") console.log(obj.trim());


Solo tienes que ajustar each función dentro de la function

var names = ["John", "Jen", "Tony"]; var obj = { prob: function () { for (var i = 0; i < names.length; i++) { document.write(names[i]); console.log(names[i]); } }, trim: function(){ names.forEach(function(name) { alert(); document.write(name) console.log(name) })} } console.log("*********") console.log(obj.prob()); console.log("*********")