Вы передаете имена функции, вам нужно передать объекты.
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;
}
Надеюсь, это поможет.
Стоит объяснить немного больше о переменных против строк, чтобы помочь спрашивающий понять * почему * 'alice' работает, но' «Алиса» 'не делает. –