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)