javascript - 为什么原型(prototype)需要实例而不是函数 self

标签 javascript

当我们使用原型(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)需要实例而不是函数 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099474/

相关文章:

javascript - 从 Angular 中的 url 获取参数

javascript - html 表格行中值的总和

javascript - 如何实现带子 div 的自动换行效果

javascript - 禁用 javascript 中的特定日期

javascript - Jquery 多选 - 切换隐藏 optgroup 问题

javascript - JS中以下几种定义方式有什么区别?

javascript - 选择伪类:after

javascript - 如何重定向到 Safari 中的 ios 设置在 ios9 中使用 javascript

javascript - 传单在标记的拖尾上更新位置

javascript - 将鼠标悬停在下拉菜单上时,如何让导航栏的下拉菜单保持不变?