继承父构造函数参数

Jem*_*Jem 35 javascript inheritance constructor arguments

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

我试图调用具有参数的父构造函数......似乎无法使其正确.

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

function PhysicsBody(aNode) {
    this.userData = aNode;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

其中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);
    //...
}
Run Code Online (Sandbox Code Playgroud)

Šim*_*das 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 () {};
Run Code Online (Sandbox Code Playgroud)

现在,当你这样做

var pb = new PhysicsBody( '...' );
Run Code Online (Sandbox Code Playgroud)

实例pb获取userData属性并从PhysicsBody.prototype(pbMethod在本例中)继承方法.


当你这样做

var db = new DynamicBody( '...' );
Run Code Online (Sandbox Code Playgroud)

实例db获取一个userData属性,并且还继承了DynamicBody.prototype(dbMethod在这种情况下)的方法,而这些方法又继承自PhysicsBody.prototype.


pim*_*vdb 10

如果我理解正确的话,说要继承父构造函数的参数,你的意思是new DynamicBody(1, 2, 3)将内部调用PhysicsBody(1, 2, 3)DynamicBody实例.

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

function DynamicBody() {
    PhysicsBody.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)