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

Javascript 原型和类/构造函数/对象成员,javascript,prototype,Javascript,Prototype,我对JavaScript中的原型链和继承非常困惑。例如,Date对象具有成员方法/函数,如Date.now。为什么在创建日期对象的新实例并调用now方法时,会抛出错误?新的日期,现在 但是,当调用原型方法(如getTime)时,在不创建新实例的情况下,caling new Date.getTime有效,但Date.getTime无效。为什么呢?我知道物体的原型会成为原始物体的一部分? 例如: function Person(firstName, lastName) { this.fir

我对JavaScript中的原型链和继承非常困惑。例如,Date对象具有成员方法/函数,如Date.now。为什么在创建日期对象的新实例并调用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;
}
prototype方法getlastName不是成为Person的成员方法吗?并且可以在不使用新关键字的情况下访问它,例如它必须如何与getTime for Date一起使用?

prototype添加了一个实例方法,这意味着它会附加到类的实例上。对于您的示例,函数getlastName的调用方式如下:

var p = new Person("first","last");
p.getlastName();

如果希望将getlastName附加到类本身,则无需使用Prototype:

对于Date类,now是一个静态方法,不使用Prototype,而getTime是一个实例方法,使用Prototype。您可以在其文档中看到它:


这里是对静态方法和原型方法的引用:

getLastName返回this.lastName,这意味着它将作用于实例。我明白了,这可能会解决一些问题。这就把事情弄清楚了一点。非常感谢你。我来自C++背景,这完全让我困惑。然而,还有一件事。当您说如果我想将getlastName附加到类本身,并且执行Person.getlastName==>{return this.lastName}时,这是否与在构造函数本身(如getfirstName)中定义它相同?如果我像你建议的那样附加它,那么只需执行Person.getlatName,它就能返回lastname吗?
new Person("first","last").getlastName();
Person.getlastName = () => { return this.lastName }