Наследовать аргументы родительского конструктора
Я просматриваю дискуссию по аналогичной теме, но не могу найти свою ситуацию...
Я пытаюсь вызывать родительские конструкторы с параметрами... Кажется, это не правильно.
У меня есть суперкласс класса 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
в этом случае).
![fsWcm.png]()
Когда вы делаете
var db = new DynamicBody( '...' );
экземпляр db
получает свойство userData
, а также наследует методы из DynamicBody.prototype
(dbMethod
в этом случае), который, в свою очередь, наследует от PhysicsBody.prototype
.
![0JQUR.png]()
Ответ 2
Если вы правильно поняли, говоря, что хотите наследовать аргументы родительского конструктора, вы имеете в виду, что new DynamicBody(1, 2, 3)
будет внутренне вызывать PhysicsBody(1, 2, 3)
для экземпляра DynamicBody
.
Это может быть достигнуто с помощью .apply
и передачи arguments
вдоль: http://jsfiddle.net/pmkrQ/.
function DynamicBody() {
PhysicsBody.apply(this, arguments);
}