2011-10-16 4 views
35

Je surfe la discussion sur un sujet similaire, mais ne peut pas trouver ma situation ...Hériter arguments du constructeur parent

essaie constructeurs de parents d'appel avec des paramètres ... ne semblent pas pour l'obtenir droit .

J'ai une superclasse PhysicsBody qui prend aNode comme seul argument constructeur:

function PhysicsBody(aNode) { 
    this.userData = aNode; 
    // ... 
} 

De cette PhysicsBody hérite d'une classe DynamicBody. Est-ce que constructeur prend aussi aNode comme seul argument ... Comme je le ferais en Java, j'aimerais appeler quelque chose d'équivalent à "super(aNode"); Impossible de trouver comment.

est ici la DynamicBody classe:

// 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); 
    //... 
} 

Répondre

58

Une façon de le faire:

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() {}; 

Maintenant, quand vous faites

var pb = new PhysicsBody('...'); 

l'instance pb obtient une propriété userData et hérite également les méthodes de PhysicsBody.prototype (pbMethod dans ce cas).


Lorsque vous faites

var db = new DynamicBody('...'); 

l'instance db obtient une propriété userData et hérite également les méthodes de DynamicBody.prototype (dbMethod dans ce cas), qui hérite à son tour de PhysicsBody.prototype.

+0

Excellent, merci pour votre temps! – Jem

+0

Brillant! Cela m'a illuude depuis l'antiquité, pourtant c'était si simple .. * faceslap * –

+0

@ Lars-Erik Pour être honnête, c'est un gâchis :-). La prochaine édition de JavaScript (ECMAScript 6) apportera une syntaxe de classe, ce qui rendra ce modèle beaucoup plus simple. –

10

Si je vous comprends bien, en disant que vous voulez hériter des arguments du constructeur parent, vous voulez dire que new DynamicBody(1, 2, 3) appellera interne PhysicsBody(1, 2, 3) pour l'instance DynamicBody. Cela peut être accompli en utilisant .apply et en passant arguments le long de: http://jsfiddle.net/pmkrQ/.

function DynamicBody() { 
    PhysicsBody.apply(this, arguments); 
} 
+0

Hey merci, ne savait pas celui-là! – Jem

Questions connexes