He revisado preguntas similares y la mayoría parece estar preocupada por this , la mía no. Estoy tratando de crear una nueva property que es una function expression en objetos en una matriz, pero la property no está definida. Lo necesito para devolver function
Aquí hay una versión de violín .
let athleteArray = [ rupert = { name: 'Mike', age: '33', sport: 'sitting', quote: 'Hello Super nintendo chalmers' }, alice = { name: 'Bill', age: '35', sport: 'cooking', quote: 'stop that' } ]; const win = function(name, sport) { console.log(`${name} won the ${sport} event!`) } //loop to add new 'win' property for (let i = 0; i < athleteArray.length; i++) { athleteArray[i].win = win(athleteArray[i].name, athleteArray[i].sport) console.log(athleteArray[i]) console.log(typeof(athleteArray[i].win)) }Use una clase donde pueda definir sus métodos.
class Person { constructor(details) { this.name = details.name || 'Unknown'; this.age = details.age || 'Unknown'; this.sport = details.sport || 'Unknown'; this.quote = details.quote || 'Unknown'; } win () { return `${this.name} won the ${this.sport} event!`; } } const athleteArray = [ new Person({ name: 'Mike', age: '33', sport: 'sitting', quote: 'Hello Super nintendo chalmers' }), new Person({ name: 'Bill', age: '35', sport: 'cooking', quote: 'stop that' }) ]; athleteArray.forEach(person => console.log(person.win()));Si quieres hacerlo a tu manera, necesitas crear una función. Solo asignas lo que devuelve a la propiedad
let athleteArray = [ rupert = { name: 'Mike', age: '33', sport: 'sitting', quote: 'Hello Super nintendo chalmers' }, alice = { name: 'Bill', age: '35', sport: 'cooking', quote: 'stop that' } ]; const win = function(name, sport) { console.log(`${name} won the ${sport} event!`) } //loop to add new 'win' property for (let i = 0; i < athleteArray.length; i++) { athleteArray[i].win = () => win(athleteArray[i].name, athleteArray[i].sport) console.log(athleteArray[i]) console.log(typeof athleteArray[i].win) athleteArray[i].win(); }Tienes que devolver algo de la función win:
let athleteArray = [ rupert = { name: 'Mike', age: '33', sport: 'sitting', quote: 'Hello Super nintendo chalmers' }, alice = { name: 'Bill', age: '35', sport: 'cooking', quote: 'stop that' } ]; const win = function(name, sport) { return `${name} won the ${sport} event!`; } //loop to add new 'win' property for (let i = 0; i < athleteArray.length; i++) { athleteArray[i].win = win(athleteArray[i].name, athleteArray[i].sport) console.log(athleteArray[i]) console.log(typeof athleteArray[i].win ) }La función 'ganar' no devuelve nada. La forma en que escribió el código, 'athleteArray[i].win' no estará definida. Para hacer lo que quieres, debes hacer algo como esto:
athleteArray[i].win = () => win(athleteArray[i].name, athleteArray[i].sport)Es más fácil entender el error si el código fuera así:
const returnedValue = win(athleteArray[i].name, athleteArray[i].sport) // Returned value is undefined athleteArray[i].win = returnedValue