Подтвердить что ты не робот

Наследовать аргументы родительского конструктора

Я просматриваю дискуссию по аналогичной теме, но не могу найти свою ситуацию...

Я пытаюсь вызывать родительские конструкторы с параметрами... Кажется, это не правильно.

У меня есть суперкласс класса 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);
    //...
}
4b9b3361

Ответ 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);
}