原型和类/构造函数/对象成员

时间:2017-11-10 05:04:23

标签: javascript prototype

我对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()一起使用日期()?

1 个答案:

答案 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/