2011-10-16 22 views
35

Ben benzer konular için tartışma gezen ediyorum, ama benim durum bulamıyorum ... ... sağ olsun gibi olamaz . Bu PhysicsBody Ofdevral ebeveyn kurucu bağımsız değişkeni

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

bir DynamicBody sınıfını miras:

Ben onun tek yapıcı argüman olarak aNode alan bir PhysicsBody üst sınıfı var. Yapıcı aynı zamanda sadece argüman olarak aNode alır mı ... Java'da yapmak isterdim, ben "super(aNode"); eşdeğer bir şey aramak isterdim Nasıl olduğunu göremiyorum.

İşte DynamicBody sınıf var: Üst yapıcı argümanları devralmak istediğiniz söyleyerek,

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

cevap

58

bir yolu bunu yapmak için:

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

, sen

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

yaparken örneği pb bir userData mülklerini ve ayrıca PhysicsBody.prototype yöntemler devralan (Bu durumda pbMethod. Eğer

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

örneği db bir userData mülklerini ve ayrıca sırayla PhysicsBody.prototype devraldığı (bu durumda dbMethod) DynamicBody.prototype gelen yöntemler devralan yapmak


.

+0

Mükemmel, zaman ayırdığınız için teşekkürler! – Jem

+0

Parlak! Bu bana eski zamanlardan beri beni utandırdı, ama çok basitti .. * yüz maskesi * –

+0

@ Lars-Erik Dürüst olmak gerekirse, bir karmaşa :-). Yaklaşan JavaScript (ECMAScript 6) sürümü, bu deseni çok daha basit hale getirecek olan sınıf sözdizimini getirecektir. –

10

seni doğru anladıysam varsa, new DynamicBody(1, 2, 3) içten DynamicBody örneğin PhysicsBody(1, 2, 3) arayacak anlamına gelir.

Bu, .apply kullanılarak ve arguments geçirerek: http://jsfiddle.net/pmkrQ/ aracılığıyla gerçekleştirilebilir.

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

teşekkür Hey, bu bir hakkında bilmiyordum! – Jem

İlgili konular