你可以将构造函数的原型分配给另一个构造函数吗?

时间:2014-03-31 04:30:58

标签: javascript constructor prototype

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

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

1 个答案:

答案 0 :(得分:2)

它有效,但你不再有两个原型对象,只有一个。

因此,您尝试委派的任何方法都不会被委派,它们将全部存在于SuperConstr prototype个对象上。

对此问题的一个问题是,如果您扩展ConstrA的原型,您实际上已经分配给SuperContr的原型,这可能不是您的原型想。