Javascript 你能把一个构造器的原型分配给另一个构造器吗?

Javascript 你能把一个构造器的原型分配给另一个构造器吗?,javascript,constructor,prototype,Javascript,Constructor,Prototype,假设您有一个构造函数ConstrA,并希望它继承另一个名为SuperConstr的构造函数及其原型 你能简单地做到这一点吗: SuperConstr = function() {}; SuperConstr.prototype.show = function (parm) { window.console.log(parm); } ConstrA = function () { this.value = 1; } ConstrA.prototype = SuperConstr.p

假设您有一个构造函数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
SuperConstr=function(){};
SuperConstr.prototype.show=函数(parm){
window.console.log(parm);
}
ConstrA=函数(){
这个值=1;
}

ConstrA.prototype=SuperConstr.prototype;// 它是有效的,但不再有两个原型对象,只有一个

因此,您试图委托的任何方法实际上都不会被委托,它们都将存在于
SuperConstr
prototype
对象上


这方面的一个问题是,如果扩展
ConstrA
的原型,实际上是在分配给
SuperContr
的原型,这可能不是您想要的;您可能还需要重新使用父构造函数。正如Alex所指出的,你最好不要像以前那样分配它,这里有更多的信息。因此每个构造函数都应该有自己的原型,这样你就可以向ConstrA的原型中添加项,例如,而不会导致它们被添加到SuperConstr的原型或从中实例化的任何对象中。这是有道理的。谢谢你。@ChrisG。别担心。JavaScript委托令人困惑,仍然让我感到困惑。祝你好运