继承父构造函数参数

Posted

技术标签:

【中文标题】继承父构造函数参数【英文标题】:Inherit parent constructor arguments 【发布时间】:2011-12-08 19:32:58 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

一种方法:

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 又继承自PhysicsBody.prototype

【讨论】:

太棒了!这自古以来就迷惑了我,但它是如此简单.. 打脸 @Lars-Erik 老实说,这是一团糟:-)。即将发布的 javascript (ECMAScript 6) 将带来类语法,这将使这种模式更加简单。 那么我们只剩下 10 年的等待期,所有 pre v6 的浏览器都死了。 :) 我仍然比各种扩展函数等更喜欢这种“派生类”的方式。(至少现在) @Lars-Erik今天随时开始使用带有 ES6 到 Es5 转译器的 ES6 类。您可以在浏览器中或之前使用例如一个 Grunt 任务npmjs.org/package/grunt-traceur 感谢您的提示。会看看。 :)【参考方案2】:

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

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

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

【讨论】:

以上是关于继承父构造函数参数的主要内容,如果未能解决你的问题,请参考以下文章

Java继承-子类不可以继承父类的构造方法

在JavaScript的原型链继承方式中,为啥子类在调用父类的构造函数时不能传参数?

如果父类中有构造函数,并且构造函数有参数,而子类没有,因为子类继承了这个构造函数,那么创建子类对象的时候,要传参

面向对象:继承抽象类抽象方法虚方法

继承中的构造析构函数调用顺序

C++调用父类的构造函数规则