2017-05-28 82 views
0

我在学习代码学习Javascript。我发现这个代码:javascript中的对象的函数

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

它的工作原理和返回的差异。然而,我想知道为什么Person.alice和Person.billy输入ageDifference返回一个错误。年龄不是以Person.billy.age和Person.alice.age存储的吗?

+2

'爱丽丝'和'比利'是对象名称,他们没有任何关系的内部结构的对象。因此'Person.billy'和'Person.alice'引用了Person类的非现有字段(即JavaScript中的原型)。 –

回答

2

简答题,没有。 Person是爱丽丝和比利的原型(类似于类但不同)。它定义了此类的新对象可以使用的方法和字段,并且不是所有Person对象的容器

原型Person本身就是一个有自己的领域和方法的对象。 Person.alice暗指存在称为“爱丽丝”的“类字段”,所有Person对象将共享 - 并且当然与您定义的新对象无关,该对象恰好存储在变量“alice”中。

底线Person.alice/.billy都是undefinedundefined.age正在引发错误。

0

new使用时,作为模具你能想到的功能

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

的。它不包含新对象,只是构建它。

0

人只是模式如何创建对象它不像在正常的编程语言..有人说,JavaScript是真正的OOP语言,因为每种类型都是对象,每个函数都是对象......没有类(模式如何创建一些对象),用于创建一些对象的对象不是类对象...如果你想模拟一些对象concpet,你必须玩原型..它有点奇怪,但原型就像一些对象的扩展,就像你说..这个对象将指向这个位置,并采取所有代码我在哪里poiting