我有两个班级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
继承Car
using Maruti.prototype = new Car()
,则需要重置类Maruti
using的构造函数属性Maruti.prototype.constructor=Maruti;
,否则 的实例Maruti
将具有 的构造函数Car
。
Maruti.prototype = new Car
在设置prototype
of之前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