Javascript:原型继承和超级构造函数

时间:2010-10-11 20:50:25

标签: javascript prototypal-inheritance

如何从继承对象中调用超级构造函数?例如,我有一个简单的动物'类':

function Animal(legs) {
  this.legs = legs;
}

我想创建一个继承自Animal的'Chimera'类,但将腿数设置为随机数(在构造函数中提供最大腿数。到目前为止,我有这个:

function Chimera(maxLegs) {
    // generate [randLegs] maxed to maxLegs
    // call Animal's constructor with [randLegs]
}
Chimera.prototype = new Animal;
Chimera.prototype.constructor = Chimera;

如何调用Animal的构造函数?感谢

3 个答案:

答案 0 :(得分:4)

我认为你想要的是constructor chaining

function Chimera(maxLegs) {
    // generate [randLegs] maxed to maxLegs
    // call Animal's constructor with [randLegs]
    Animal.call(this, randLegs);
}

或者您可以考虑Parasitic Inheritance

function Chimera(maxLegs) {

    // generate [randLegs] maxed to maxLegs
    // ...

    // call Animal's constructor with [randLegs]
    var that = new Animal(randLegs);

    // add new properties and methods to that
    // ...

    return that;
}

答案 1 :(得分:2)

您可以使用每个函数的call方法:

function Chimera(maxLegs) {
   var randLegs = ...;
   Animal.call(this, randLegs);
}

答案 2 :(得分:-2)

你应该可以这样做:

new Animal();