我对JavaScript中的原型链和继承感到很困惑。例如,Date()对象具有成员方法/函数,例如Date.now()
。为什么当你创建一个Date()对象的新实例,并调用now()方法时,它会抛出一个错误? new Date.now()
但是在调用诸如getTime
之类的原型方法时,如果不创建新实例,则调用new Date().getTime()
可以工作但不能Date().getTime()
。这是为什么?我理解对象的原型成为原始对象的一部分?
例如:
function Person(firstName, lastName) {
this.firstname = firstName;
this.lastname = lastName;
this.getfirstName = () => {
return this.firstName;
}
}
Person.prototype.getlastName = () => {
return this.lastName;
}
原型方法getlastName
不会成为Person
的成员方法,并且可以在不使用new
关键字的情况下访问,例如必须如何与getTime()一起使用日期()?
答案 0 :(得分:1)
Prototype
添加了一个实例方法,这意味着它会附加到类的实例上。对于您的示例,函数getlastName
将仅被调用:
var p = new Person("first","last");
p.getlastName();
或
new Person("first","last").getlastName();
如果您希望将getlastName
附加到班级本身,则无需使用Prototype
:
Person.getlastName = () => { return this.lastName }
对于Date
类,now
是静态方法(不使用Prototype
),而getTime
是实例方法(使用Prototype
})。您可以在其文档中看到它:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
以下是对静态和原型方法的引用:http://blog.anselmbradford.com/2009/04/09/object-oriented-javascript-tip-creating-static-methods-instance-methods/