2011-10-16 35 views
35

我浏览讨论了类似的话题,但找不到我的情况......继承父类的构造参数

我试图用参数调用父构造......似乎无法得到它的权利。

我有一个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); 
    //... 
} 

回答

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.prototypedbMethod在这种情况下)的方法,进而从PhysicsBody.prototype继承。

+0

非常好,谢谢你的时间! – Jem

+0

太棒了!自古以来,这一直是我的启示,但它非常简单.. * faceslap * –

+0

@ Lars-Erik说实话,这是一团糟:-)。即将到来的JavaScript版本(ECMAScript 6)将带来类语法,这将使这种模式更简单。 –

10

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

这可以通过使用.apply并通过arguments沿着:http://jsfiddle.net/pmkrQ/完成。

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

嘿谢谢,不知道那个! – Jem