我有两个班级Car和Maruti. Maruti当我通过将原型分配给新Car对象来使用继承时。为什么我必须设置Maruti.prototype.constructor为Maruti. 如下代码所示。
function Car(){
}
function Maruti(){
}
Maruti.prototype = new Car()
Maruti.prototype.constructor = Maruti
无法理解代码的最后一行。有人可以详细解释一下吗?
我有两个班级Car和Maruti. Maruti当我通过将原型分配给新Car对象来使用继承时。为什么我必须设置Maruti.prototype.constructor为Maruti. 如下代码所示。
function Car(){
}
function Maruti(){
}
Maruti.prototype = new Car()
Maruti.prototype.constructor = Maruti
无法理解代码的最后一行。有人可以详细解释一下吗?
如果Maruti继承Carusing Maruti.prototype = new Car(),则需要重置类Marutiusing的构造函数属性Maruti.prototype.constructor=Maruti;,否则 的实例Maruti将具有 的构造函数Car。
Maruti.prototype = new Car在设置prototypeof之前Maruti只有一个属性constructor,它被设置为Maruti自身:
function Car() {}
function Maruti(){}
console.log(Maruti.prototype); // logs the following
// {
// constructor: Maruti
// }
Maruti.prototype = new Car;
Maruti.prototype.constructor = Maruti;
设置后prototype的Maruti属性丢失(因为它不是同一个对象)new Car。constructor取而代之的Maruti.prototype.constructor是Car(因为它继承自Car.prototype)。因此,我们再次将constructor属性设置为Maruti。
如需更直观的解释,请查看以下答案:https ://stackoverflow.com/a/8096017/783743
鉴于这种,
function Car(){
}
并且该constructor属性是函数原型的属性
现在,如果您查找新Car实例的构造函数
new Car().constructor === Car
你看它是Car,那么你正在设置
function Maruti(){
}
Maruti.prototype = new Car();
记住new Car().constructor === Car?,
就像现在一样Maruti.prototype.constructor === Car,因此被隐藏到Maruti实例中,覆盖原来的Maruti.prototype.constructor
因此,如果您创建一个新的实例Maruti并查找构造函数
new Maruti().constructor === Car
你看它是Car,虽然new Maruti()是由Maruti而不是由Car