继承父构造函数参数
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);
【讨论】:
以上是关于继承父构造函数参数的主要内容,如果未能解决你的问题,请参考以下文章
在JavaScript的原型链继承方式中,为啥子类在调用父类的构造函数时不能传参数?