假设您有一个构造函数ConstrA,并且希望它继承自另一个名为SuperConstr的构造函数及其原型。
您可以简单地这样做:
SuperConstr = function() {};
SuperConstr.prototype.show = function (parm) {
window.console.log(parm);
}
ConstrA = function () {
this.value = 1;
}
ConstrA.prototype = SuperConstr.prototype; // <----- Is this valid?
ConstrA.prototype.showAgain = function (parm) {
window.console.log(parm * 2);
}
obj = new ConstrA();
obj.show(obj.value); // 1
obj.showAgain(obj.value); // 2
obj现在似乎继承自ConstrA和SuperConstr,但是我不确定这是正确的方法。
换句话说,构造函数的原型是否应该等于(指向)其构造函数的原型?
最佳答案
这是有效的,但是您不再拥有两个原型对象,只有一个。
因此,您尝试委派的任何方法实际上都不会被委派,它们都将存在于SuperConstr
的prototype
对象中。
与此有关的一个问题是,如果扩展ConstrA
的原型,则实际上是在分配给SuperContr
的原型,这可能不是您想要的。