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