我对JavaScript中的原型链和继承感到非常困惑。例如,Date(( 对象具有成员方法/函数,例如 Date.now()
。那么,为什么当你创建 Date(( 对象的新实例并调用 now(( 方法时,它会抛出错误? new Date.now()
但是当调用原型方法(如 getTime
(时,caling 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
关键字的情况下访问,就像它必须与 Date(( 的 getTime(( 一起使用一样吗?
>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/