gpt4 book ai didi

javascript - 为什么原型(prototype)需要一个实例而不是函数自身

转载 作者:行者123 更新时间:2023-11-29 17:23:25 26 4
gpt4 key购买 nike

当我们使用原型(prototype)时。我们使用像

function classA(){

}
function classB(){

}

classB.prototype = new classA();

为什么要这样写呢?为什么不是呢?

classB.prototype = classA;

我设置原型(prototype)后是classA;然后我记录 classB.prototype。控制台日志如下

函数类A(){

这是什么意思?我尝试将一些方法添加到 classA 中,但我无法使用 classB.prototype.BLABLA 调用它们。

我的英语不太好。所以 。不知道我解释的好不好。

最佳答案

why isn't it? classB.prototype = classA;

因为 classB 的所有实例都将从函数 classA 继承,这通常不是您想要的。 classB 的实例将继承函数对象的所有属性,例如 .call [MDN].apply [MDN] .它们不会继承您分配给构造函数内部实例或 classA 原型(prototype)的属性。

why should we write it like that?

您希望 classB 的每个实例都具有与 classA实例 相同的属性。


但即使是 classB.prototype = new classA(); 也不是一个很好的方法。如果 classA 需要将参数传递给构造函数怎么办?

最好让 classB 的实例继承自 classA 的原型(prototype),例如:

classB.prototype = Object.create(classA.prototype);
classB.prototype.constructor = classB;

并且在构造函数中,您在新实例上调用父构造函数:

function classB(){
classA.apply(this, arguments);
}

引用:Object.create

关于javascript - 为什么原型(prototype)需要一个实例而不是函数自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099474/

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