Reflexive
Reflexive

Reputation: 1

encapsulating and instantiating objects

I'm trying to assign an object to the property of another object.

That is model of the real project. Here, I have a race, with an array of cars, which have an driver property. The driver property is an object. At the console output, I want to have a car with the name of the driver.

<script>
    let carsNames = ["Ferrari", "Mercedes", "Maserati", "Renault"];
    let drivers = ["Ayrton", "Alain", "Michael", "Nikki"];

    let Car = (function (_team, _driver) {
        let team = _team;
        let driver = _driver;
        return {
            getTeam: function () {
                return team;
            },

            getDriver: function () {
                return driver;
            }
        }
    });

    let Driver = (function (_name) {
        let name = _name;
        return {
            getName: function () {
            }
        }
    });

    let Race = (function () {
        cars = [];
        for (let i = 0; i < carsNames.length; i++) {
            driver = new Driver(drivers[i]);
            car = new Car(carsNames[i], driver);

            cars.push(car);
        }

        return {
            getCars: function () {
                return cars;
            }
        }
    });

    let GPSyldavie = new Race();
    let myrace = GPSyldavie.getCars();
    myrace.forEach(function (mr) {
        console.log(mr.getTeam(), mr.getDriver().getName());
    })

    // Console output :
    // Ferrari undefined
    // Mercedes undefined
    // Maserati undefined
    // Renault undefined
</script>

The point is to bind a driver with a car, but somewhere I fail to tell to the car that it is driven by a driver.

Upvotes: 0

Views: 41

Answers (1)

D Hagan
D Hagan

Reputation: 11

You're getName function does not return anything...


    let Driver = (function (_name) {
            let name = _name;
            return {
                getName: function () {
                }
            }
        });

Should look more like...


    let Driver = (function (_name) {
            let name = _name;
            return {
                getName: function () {
                    return name;
                }
            }
        });

Upvotes: 1

Related Questions