我在代码学院学习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);
它起作用并返回差异。但是我想知道为什么在ageDifference中输入Person.alice和Person.billy会返回错误。是不是将年龄存储为Person.billy.age和Person.alice.age?
答案 0 :(得分:2)
简短的回答,没有。 Person
是爱丽丝和比利的原型(类似但不同于类)。它定义了此类的新对象可以使用的方法和字段,并且不是所有Person
对象的容器,如您所暗示的那样。
原型Person
本身就是一个拥有自己的字段和方法的对象。 Person.alice
暗示有一个"类字段"所有Person
个对象都会分享 - 当然与你定义的新对象无关,而这些对象恰好存储在变量" alice"中。
底线,Person.alice/.billy
都是undefined
,undefined.age
正在抛出错误。
答案 1 :(得分:0)
你可以想到这个功能
function Person (name, age) {
this.name = name;
this.age = age;
}
与new
一起使用时,作为模具。它不包含新对象,只需构建它。
答案 2 :(得分:0)
人只是架构如何创建对象它不像普通的编程语言。有人说Javascript是真正的OOP语言,因为每个类型都是对象,每个函数都是对象......没有类(模式如何创建一些对象),创建一些对象的shcema是对象而不是类...如果你想模拟一些oop concpet你必须玩原型..它有点奇怪但原型就像某些对象的扩展,像你一样说..这个对象将指向这个位置,并把所有代码都放在我的位置