为什么在对象构造函数中定义的方法在使用"new"创建对象时有效,而在使用"Object.create"时不起作用?



我为"汽车;然后创建两个汽车;新的";关键字,另一个使用";Object.create;

function car (name) {
this.name=name
}
let car1 = new car("volvo")
let car2 = Object.create(car.prototype)
car2.name = "hyundai"

BTW:是否可以立即用";Object.protype";就像用";新的";?(所以我不必使用下一行"car2.name="hyundai"(

如果我然后设置一个";。喇叭(("方法";car.prototype";,它既适用于";car1";以及";car2":

car.prototype.honk= function (){
return `${this.name}'s honk`
}

然而,如果我定义";。喇叭(("方法在";汽车;构造函数,则";car1";能够使用它,但是";car2";不是!为什么?

function car (name) {
this.name=name
this.honk = function(){
return `${this.name}'s honk`;
}
}

是否可以立即用"Object.create;就像用";新的";?

不,不是。这就是我们使用构造函数的全部原因,以便能够在没有重复代码的情况下初始化新实例的属性。另一方面,Object.create只创建一个从给定原型继承的空对象。

您刚刚发现了new运算符和Object.create之间的主要区别。两者都利用原型继承,但只有new使用构造函数,而Object.create只创建了一个具有第一个参数作为原型的对象。

相关内容

最新更新