2016-02-28 2 views
0

У меня возникла проблема с запуском этого кода, похоже, что он должен работать, и я проверил синтаксис на нескольких сайтах. Проблема в том, что он говорит, что функция, вызываемая в этой строке if (this.bank > car.getCost()){, не является функцией. Я опубликую то, что у меня есть, пока я пытаюсь работать.Javascript «Не является функцией»

var uniqueID = 0; 
 
var minCost = 5000; 
 
var maxCost = 100000; 
 
var minMileage = 100; 
 
var maxMileage = 100000; 
 

 
function carHeader() { 
 
    console.log("Make & Model \t| Year \t| Color \t| Cost \t| Mileage"); 
 
} 
 

 
function Car(make, model, year, color) { 
 
    this.ID = uniqueID; 
 
    uniqueID = uniqueID + 1; 
 
    this.make = make; 
 
    this.model = model; 
 
    this.makeAndModel = make + " " + model; 
 
    this.year = year; 
 
    this.color = color; 
 
    this.cost = Math.floor((Math.random() * maxCost) + minCost); 
 
    this.mileage = Math.floor((Math.random() * maxMileage) + minMileage); 
 
    this.getCarInfo = function() { 
 
    console.log(this.makeAndModel + "\t|" + this.year + "\t|" + this.color + "\t|" + this.cost + "\t|" + this.mileage); 
 
    } 
 
    this.getCost = function() { 
 
    return this.cost; 
 
    } 
 
} 
 

 

 
function Garage() { 
 
    this.garage = []; 
 
    this.bank = 1000000; //$1m 
 
    this.buyCar = function(car) { 
 
    if (this.bank > car.getCost()) { 
 
     this.garage.push(car); 
 
     this.bank = this.bank - car.getCost(); 
 
     console.log("Your new bank value is: " + this.bank); 
 
     return 1; 
 

 
    } else { 
 
     console.log("You do not have enough funds"); 
 
     return -1; 
 
    } 
 
    } 
 
    this.getGarageInfo = function() { 
 
    console.log("--Garage Info--"); 
 
    console.log("Your current total bank:" + this.bank); 
 
    carHeader(); 
 
    for (i = 0; i < this.garage.length; i++) { 
 
     this.garage[i].getCarInfo(); 
 
    } 
 
    } 
 
} 
 

 

 
var car1 = new Car("Honda", "CRX", 1985, "Black") 
 
var car2 = new Car("Hyundai", "Santa Fe", 2104, "White") 
 
var car3 = new Car("Lotus", "Elise", 2010, "Pearl") 
 
var car4 = new Car("Tesla", "Model S", 2014, "White") 
 
var car5 = new Car("Tesla", "Model 3", 2017, "Black") 
 

 
carArray = []; 
 
carArray.push(car1); 
 
carArray.push(car2); 
 
carArray.push(car3); 
 
carArray.push(car4); 
 
carArray.push(car5); 
 

 
carArray = [car1, car2, car3, car4, car5]; 
 
var myGarage = new Garage(); 
 

 
var fundsStillAvailable = true; 
 
var carIndex = 0; 
 

 
do { 
 
    console.log("Index :" + carIndex) 
 
    if (myGarage.buyCar([carIndex]) == 1) { 
 
    console.log("You have purchased a car" + carIndex + " length" + carArray.length); 
 
    if (carIndex < carArray.length) { 
 
     carIndex = carIndex + 1; 
 
    } else { 
 
     carIndex = 0; 
 
    } 
 
    } else { 
 
    console.log("You do not have enough money"); 
 
    fundsStillAvailable = false; 
 

 
    } 
 
} while (fundsStillAvailable === true) 
 

 
if (myGarage.buyCar(car1) == 1) { 
 
    console.log("You have purchased a car"); 
 
} 
 
myGarage.getGarageInfo();

+0

попробуйте изменить 'myGarage.buyCar ([carIndex])' в 'myGarage.buyCar (carArray [carIndex])' – dewd

+0

Ух ты, мой плохой. Спасибо! – Darkweld

ответ

0

кажется, что вы пытаетесь вызвать функцию объекта, не правда экземпляр автомобиля.

Я думаю, вы пытаетесь извлечь свои автомобили из массива автомобилей, но, похоже, вы пропустили, чтобы включить имя массива, чтобы получить содержащиеся в нем автомобили по индексу. Добавление carArray к этой линии решает проблему:

if (myGarage.buyCar(carArray[carIndex]) == 1) 
Смежные вопросы