Tengo la función CarFactory, que produce autos y debería cambiar el color de estos autos.
const warehouse = require("./warehouse"); function CarFactory(power = 10) { this.warehouse = warehouse; this.produceCar = (color = "red", wheels = 4, engine = false) => { if (power < 2) { return null } else { let car = { "id": warehouse.nextIdentifier, "color": color, "wheels": wheels, "engine": engine } warehouse.createdCars.push(car); warehouse.nextIdentifier++; } } this.addEnergyPower = (value = 0) => { power += value; } this.changeCarColor = (num) => { if (power < 1) { return null } else { warehouse.createdCars[num].color = 'blue' } } } module.exports = CarFactory;Pero recibo un error No se pueden establecer propiedades de indefinido (estableciendo 'color'). Si codifico 0 así para: createdCars[0], en realidad funciona para el auto indexado 0.
este es el archivo de almacén
let warehouse = { createdCars: [], nextIdentifier: 0 }; module.exports = warehouse;aquí es donde la broma intenta cambiar de color
for (let i = 0; i < myFactory.warehouse.createdCars.length; i += 2) { let car = myFactory.warehouse.createdCars[i]; if (myFactory.changeCarColor(car) !== null) {} else { if (energyBoosts.length > 0) { myFactory.addEnergyPower(energyBoosts.shift()); i -= 2; } else { break } } }Por lo que puedo decir en la línea if (myFactory.changeCarColor(car) !== null) {} else{ car would be { "id": warehouse.nextIdentifier, "color": color, "wheels": wheels, "engine": engine } pero lo que parece que querrías es el id. Así que cambie if (myFactory.changeCarColor(car) !== null) {} else{ a if (myFactory.changeCarColor(car.id) !== null) {} else{ y vea si eso funciona.
Tienes this.changeCarColor = (num) pero parece que quieres pasar un car a eso y luego obtener la identificación. No tengo idea de qué es esto, así que falla aquí: console.log(typeof energyBoosts); con "indefinido" para energyBoosts Pero esa es la PRÓXIMA pregunta, no la que nos ocupa.
let warehouse = { createdCars: [], nextIdentifier: 0 }; function CarFactory(power = 10) { this.warehouse = warehouse; this.produceCar = (color = "red", wheels = 4, engine = false) => { // console.log("here"); if (power < 2) { return null; } else { let car = { "id": warehouse.nextIdentifier, "color": color, "wheels": wheels, "engine": engine }; warehouse.createdCars.push(car); warehouse.nextIdentifier++; } } this.addEnergyPower = (value = 0) => { power += value; } this.changeCarColor = (car) => { console.log(car.color, car.id, power); if (power < 1) { return null; } else { warehouse.createdCars[car.id].color = 'blue'; } } } let myFactory = new CarFactory(); //console.log(myFactory); for (let c = 0; c < 10; c++) { //console.log(c); myFactory.produceCar("red", 4, false); } //console.log("GO!", myFactory.warehouse); for (let i = 1; i < myFactory.warehouse.createdCars.length; i += 2) { //console.log(i); let car = myFactory.warehouse.createdCars[i]; console.log("Car:", car); if (myFactory.changeCarColor(car) == null) { console.log(typeof energyBoosts); if (energyBoosts.length > 0) { myFactory.addEnergyPower(energyBoosts.shift()); i -= 2; } else { break; } } }