设置`ConstructorFunc.prototype.constructor = ConstructorFunc`。有什么想法?

读一本关于继承的书。它给出了实现继承的示例。

function Mammal() {}
Mammal.prototype = new Animal();
Mammal.prototype.constructor = Mammal;
Mammal.prototype.isPregnant = false;
Mammal.prototype.pairsOfEyes = 1;

我不理解为什么他们这么做Mammal.prototype.constructor = Mammal
在这行之前,我们有

Mammal.prototype.constructor === Animal 对? 那么为什么将其设置为哺乳动物呢?

说明如下:

更改Mammal.prototype属性的值后,我们将分配 为了将Mammal构造函数提供给Mammal.constructor属性, 更改值时清除构造函数属性上的副作用 原型。

?!

那是什么意思?

此模式是否正确?

MDN教程对此主题也有些含糊。 请参见此处的示例,其中“老师”扩展了“人”。

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance

我们需要继续做一件事。添加最后一行之后,Teacher.prototype的构造函数属性现在等于Person(),因为我们只是将Teacher.prototype设置为引用一个对象,该对象继承自Person.prototype!尝试保存您的代码,在浏览器中加载页面,然后在控制台中输入Teacher.prototype.constructor进行验证。这可能会成为问题,因此我们需要设置此权限。

?!?!

因此,似乎需要执行此步骤。但是其背后的想法是什么?

我的意思是谁需要此属性(以后),为什么不以这种方式设置它会引起问题呢?

liuxinnc 回答:设置`ConstructorFunc.prototype.constructor = ConstructorFunc`。有什么想法?

  

Mammal.prototype.constructor === Animal对吗?那么为什么将其设置为哺乳动物呢?

对,那不是一件好事。 Mammal.prototypeMammal实例的原型,所以您想要

new Mammal().constructor === Mammal

不是

new Mammal().constructor === Animal

这就是改变所要实现的。

  

此模式是否正确?

排序。这很陈旧–懒惰(但实用)的ES3做事方式。在ES5中,您将使用Object.create(Animal.prototype),允许父构造函数实际执行某项操作,并相应地在子构造函数内部调用父构造函数:

function Mammal() {
    Animal.call(this);
}

如今,class将为您完成所有这一切以及更多工作:

class Mammal extends Animal {}
本文链接:https://www.f2er.com/3169462.html

大家都在问