确保调用ageDifference函数

时间:2015-01-09 17:15:10

标签: javascript jquery function oop object

我正在尝试学习JavaScript并且我坚持完成一项任务(获得alice和billy之间的年龄差异)。我写了下面的代码,但是我收到了一个错误:

  

哎呀,再试一次。确保调用ageDifference函数。

// 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");

3 个答案:

答案 0 :(得分: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表示法,因为它不能显式声明参数类型,因为它不是静态类型语言,但我们可以假设创建此函数以接受{{1对象。

高级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

我希望这会有所帮助。

答案 1 :(得分:0)

您将字符串传递到ageDifference(),您需要传递alicebilly个实例

// 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);

答案 2 :(得分: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);

并找到差异:

var diff = ageDifference(alice,  billy);