假设您有一个构造函数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,但是我不确定这是正确的方法。

换句话说,构造函数的原型是否应该等于(指向)其构造函数的原型?

最佳答案

这是有效的,但是您不再拥有两个原型对象,只有一个。

因此,您尝试委派的任何方法实际上都不会被委派,它们都将存在于SuperConstrprototype对象中。

与此有关的一个问题是,如果扩展ConstrA的原型,则实际上是在分配给SuperContr的原型,这可能不是您想要的。

10-08 09:22