继承父构造函数参数

时间:2011-10-16 17:18:40

标签: javascript inheritance constructor arguments

我正在浏览类似主题的讨论,但找不到我的情况......

尝试使用参数调用父构造函数......似乎无法正确使用。

我有一个PhysicsBody超类,它将aNode作为唯一的构造函数参数:

function PhysicsBody(aNode) {
    this.userData = aNode;
    // ...
}

这个PhysicsBody继承了DynamicBody类。构造函数也只将aNode作为参数...就像我会用Java做的那样,我喜欢称之为等同于"super(aNode");的东西似乎无法找到方法。

这是DynamicBody类:

// Wanted to give "new PhysicsBody(this, aNode)", but that fails!
DynamicBody.prototype = new PhysicsBody();
DynamicBody.prototype.constructor=DynamicBody;

function DynamicBody(aNode) {

    // calling the parent constructor fails too:
    // PhysicsBody.prototype.constructor.call(this, aNode);
    //...
}

2 个答案:

答案 0 :(得分:58)

一种方法:

function PhysicsBody( aNode ) {
    this.userData = aNode;
}

PhysicsBody.prototype.pbMethod = function () {};

function DynamicBody( aNode ) {
    PhysicsBody.call( this, aNode );
}

// setting up the inheritance
DynamicBody.prototype = Object.create( PhysicsBody.prototype );

DynamicBody.prototype.dbMethod = function () {};

现在,当你做

var pb = new PhysicsBody( '...' );

实例pb获取userData属性,并且还继承了PhysicsBody.prototype(在这种情况下为pbMethod)中的方法。


当你这样做时

var db = new DynamicBody( '...' );

实例db获取userData属性,并且还继承DynamicBody.prototype(本例中为dbMethod)的方法,后者继承自PhysicsBody.prototype

答案 1 :(得分:10)

如果我理解正确,通过说你想继承父构造函数参数,就意味着new DynamicBody(1, 2, 3)将在内部为PhysicsBody(1, 2, 3)实例调用DynamicBody

这可以通过使用.apply并传递arguments来完成:http://jsfiddle.net/pmkrQ/

function DynamicBody() {
    PhysicsBody.apply(this, arguments);
}