我正在浏览类似主题的讨论,但找不到我的情况......
尝试使用参数调用父构造函数......似乎无法正确使用。
我有一个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);
//...
}
答案 0 :(得分: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.prototype
(本例中为dbMethod
)的方法,后者继承自PhysicsBody.prototype
答案 1 :(得分:10)
如果我理解正确,通过说你想继承父构造函数参数,就意味着new DynamicBody(1, 2, 3)
将在内部为PhysicsBody(1, 2, 3)
实例调用DynamicBody
。
这可以通过使用.apply
并传递arguments
来完成:http://jsfiddle.net/pmkrQ/。
function DynamicBody() {
PhysicsBody.apply(this, arguments);
}