gpt4 book ai didi

javascript - 设置 `ConstructorFunc.prototype.constructor = ConstructorFunc` 。这是什么想法?

转载 作者:行者123 更新时间:2023-11-28 16:57:35 25 4
gpt4 key购买 nike

阅读有关继承的书籍章节。它给出了实现继承的示例。

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.constructor 属性中,以便更改值时清除构造函数属性上的副作用原型(prototype)。

?!

这是什么意思?

这个模式实际上正确吗?

MDN 教程在这个主题上也有点含糊。请参阅此处 Teacher 扩展 Person 的示例。

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

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

?!?!

看来这一步是有必要的。但其背后的想法是什么?

我的意思是谁需要这个属性(稍后),为什么不这样设置它会导致问题?

最佳答案

Mammal.prototype.constructor === Animal Right? So why do they set it to Mammal?

是的,这不是一件好事。 Mammal.prototypeMammal实例的原型(prototype),所以你想要

new Mammal().constructor === Mammal

不是

new Mammal().constructor === Animal

这就是变革所实现的目标。

Is this pattern correct actually or not?

有点。它非常过时了——懒惰(但实用)的 ES3 做事方式。在 ES5 中,您将使用 Object.create(Animal.prototype),允许父构造函数实际执行某些操作,并相应地在子构造函数内调用父构造函数:

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

如今,class 将为您完成所有这些以及更多操作:

class Mammal extends Animal {}

关于javascript - 设置 `ConstructorFunc.prototype.constructor = ConstructorFunc` 。这是什么想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58686282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com