2015-01-09 3 views
-5

Я пытаюсь изучить JavaScript и застрял в задаче (получите разницу в возрасте между alice и billy). Я написал следующий код, но я получаю сообщение об ошибке:Обязательно вызовите функцию ageDifference

Oops, try again. Make sure to call the ageDifference function.

// Our person constructor 
function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

// We can make a function which takes persons as arguments 
// This one computes the difference in ages between two people 
var ageDifference = function(person1, person2) { 
    return person1.age - person2.age; 
} 

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

// get the difference in age between alice and billy using our function 
var diff = ageDifference("Alice", "Billy"); 

ответ

2

Вы передаете имена функции, вам нужно передать объекты.

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

// get the difference in age between alice and billy using our function 
var diff = ageDifference(alice, billy); 

Давайте поговорим немного больше о том, почему ваш первый подход был неправильным. Мы все начали программировать где-то и понятным, почему вы передали строку функции, прежде всего, давайте взглянем на подпись метода.

function ageDifference(Person person1, Person person2) 

ПРИМЕЧАНИЕ: Это не JavaScript обозначения, как вы не можете явно объявлять типы параметров, как это не статически типизированный язык, однако можно предположить, что эта функция была создана, чтобы принять Person объекты.

Person на высоком уровне, может выглядеть следующим образом:

var Person = function(name, age) { 
    this.name = name; 
    this.age = age; 
} 

При создании bob и alice вам constructed их, означает, что вы создали новый экземпляр в памяти Person объекта. Вы прошли в строке для своего имени и целого для своего возраста. В памяти мы можем теперь предположить, что в нашей текущей области существуют следующие переменные.

var alice[ name: "Alice", age: "25" ]; 
var bob [ name: "Bob", age: "30" ]; 

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

bob.age - alice.age = 5 

приравнять бы

30 - 25 = 5 

Зная это теперь мы можем понять, почему ваш первый подход к решению вашей проблемы дал вам ошибки. По определению строка представляет собой массив символов, и поэтому вы не можете выполнять методы, которые не существуют в этом типе, например .age.

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

function ageDifference(person1, person2) 
{ 
     var max = Math.max(person1.age, person2.age); 
     var min = Math.min(person1.age, person2.age); 

     return max - min; 
} 

Надеюсь, это поможет.

+0

Стоит объяснить немного больше о переменных против строк, чтобы помочь спрашивающий понять * почему * 'alice' работает, но' «Алиса» 'не делает. –

0

Ваша передача строки в ageDifference() вам нужно передать ваши alice и billy экземпляры

// Our person constructor 
function Person(name, age) { 
    this.name = name; 
    this.age = age; 
} 

// We can make a function which takes persons as arguments 
// This one computes the difference in ages between two people 
var ageDifference = function(person1, person2) { 
    return person1.age - person2.age; 
} 

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

// get the difference in age between alice and billy using our function 
var diff = ageDifference(alice, billy); 

console.log(diff); 
0

Определите функцию, как это, чтобы избежать отрицательной разницы

function ageDifference(p1, p2) 
{ 
    return p2.age < p1.age ? p1.age - p2.age : p2.age - p1.age;   
} 

Создание объектов лицо:

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

A го получить разницу:

var diff = ageDifference(alice, billy); 
Смежные вопросы