2016-01-23 2 views
-3

Итак, я изучаю ООП. Следующий пример не работает для меня. И не могу понять, почему. Я упростил код до двух переменных. Моя проблема действительно в car1.setOdometer(1000) Эта строка не работает, когда я пытаюсь. В основном эта строка автоматически изменяет переменную OdometerReading. Затем, когда я нажимаю кнопку 3, я получаю строку undefined для «Miles».Метод установки ООП не работает должным образом

JS

function Car(Make, Miles) { 
    this.make = Make; 
    this.odometerReading = Miles; 
    this.showInfo = function() { 
     alert(this.make + this.odometerReading); 
    }; 
    this.setOdometer = function(newMiles) { 
     this.odometerReading = "newMiles"; 
    }; 
} 

var car1 = new Car("X", 50); 
var car2 = new Car("Y", 75); 
car1.setOdometerReading(1000); //this doesn't work for me. 
//It winds up changing odometerReading on car1.showInfo() from the onset! 

HTML

<input type="button" value="Car1" onclick="car1.showInfo()"> 
<input type="button" value="Car2" onclick="car2.showInfo()"> 
<input type="button" value="Change Car1" onclick="car1.setOdometer()"> 

книга пример, как и выше. Но когда я нажимаю Car1, это изменение произошло автоматически. Когда я нажимаю, меняем Car1, THEN Car1, я получаю неопределенное сообщение.

Но когда я вношу следующие изменения, код работает. редактировать 'this.setOdometer' здесь:

this.setOdometer=function(newMiles){this.odometerReading=1000;} 

удалить

car1.setOdometerReading(1000); 

Могу ли я что-то отсутствует, или учебник книга просто неправильно?

+2

Этот код не содержит закрывающего кронштейна, начинающегося с 'function Cars (Make, Miles) {'? Также функция имеет неправильное имя, она должна быть 'Car' вместо' Cars'. –

+2

setOdometerReading() не определен нигде. – Prashant

+2

Вы копируете это где-то или записываете вручную? Имеются ошибочные имена функций и другие небольшие ошибки. Двойной проверить все. Используйте инструменты вашего браузера [http://www.creativebloq.com/javascript/javascript-debugging-beginners-3122820). – ekuusela

ответ

1

Код ссылки для рабочей реализации. Правильно устанавливает odometerReading для car1. Ошибки были всего лишь из-за опечаток, я думаю.

<head> 
<script> 
function Car(Make, Miles){ 
    this.make = Make; 
    this.odometerReading = Miles; 

    this.showInfo = function() { 
     alert(this.make + " " + this.odometerReading); 
    } 

    this.setOdometer = function(newMiles) { 
     this.odometerReading = newMiles; 
    } 
} 
var car1 = new Car("X", 50); 
var car2 = new Car("Y", 75); 
car1.setOdometer(1000); //now it has the right function name and actually uses the parameter. 
</script> 
</head> 

<body> 
<input type="button" value="Car1" onclick="car1.showInfo()"> 
<input type="button" value="Car2" onclick="car2.showInfo()"> 
<input type="button" value="Change Car1" onclick="car1.setOdometer('something Else')"> 
</body> 
+0

вещь 50 никогда не будет вызвана для car1. он должен составлять x и мили 50 и использовать параметр так, чтобы его не нужно было использовать в событии onclick. – chignon

+0

'odometerReading = 50' немедленно перезаписывается вызовом' setOdometer (1000) '. Если вы оставите эту строку, она будет иметь значение '50'. У меня был 'setOdometer()' использовать параметр, потому что это буквально функция setter, установив его в статическую строку, для меня это не имело смысла. –

1

Я вижу класс Автомобили и новые объекты типа Автомобили.

+0

это должен быть автомобиль. извините – chignon

Смежные вопросы