Max McKinney
Max McKinney

Reputation: 1218

Object #<person> has no method 'carName'

So I'm getting this error; Object # has no method 'carName' But I clearly do. Pastebin

I've also tried referencing the car's "model" property with

player.car.model

but that doesn't work, I get a type error. Any ideas? Do you need more info?

function person(name, car) {
    this.name = name;
    this.car = car;
    function carName() {
        return car.model;
    }
}

var player = new person("Name", mustang);
var bot = new person("Bot", mustang);
var bot2 = new person("Bot 2", mustang);

function makeCar(company, model, maxMPH, tireSize, zeroToSixty) {
    this.company = company;
    this.model = model;
    this.maxMPH = maxMPH;
    this.tireSize = tireSize;
    this.zeroToSixty = zeroToSixty;
}

var mustang = new makeCar("Ford", "Mustang GT", 105, 22, 8);
var nissan = new makeCar("Nissan", "Nissan 360z", 100, 19, 6);
var toyota = new makeCar("Toyota", "Toyota brandname", 95, 21, 7);

Upvotes: 1

Views: 121

Answers (1)

user1106925
user1106925

Reputation:

It does not have the method. It has a function that is local to the variable scope of the constructor.

To give each object the function, assign it as a property...

function person(name, car) {
    this.name = name;
    this.car = car;
    this.carName = function() {
        return this.car.model;
    };
}

Or better, place it on the prototype of the constructor...

function person(name, car) {
    this.name = name;
    this.car = car;
}

person.prototype.carName = function() {
    return this.car.model;
};

Also, mustang isn't initialized when you're passing it to the person constructor.

Upvotes: 3

Related Questions