2011-10-16 42 views
35

Tôi đang duyệt thảo luận cho một chủ đề tương tự, nhưng không thể tìm thấy trường hợp của tôi ...Thừa kế đối số hàm tạo của cha mẹ

Đang cố gắng gọi hàm tạo phương thức cha với thông số ... dường như không thể làm đúng .

Tôi có một lớp cha PhysicsBody rằng mất aNode như là đối số nhà xây dựng duy nhất của nó:

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

Trong PhysicsBody này được thừa hưởng một lớp DynamicBody. Là constructor cũng có aNode là đối số duy nhất ... Giống như tôi sẽ làm điều đó trong Java, tôi rất muốn gọi một cái gì đó tương đương với "super(aNode"); Có vẻ như không thể tìm hiểu làm thế nào.

Đây là lớp 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); 
    //... 
} 

Trả lời

58

Một cách để làm điều đó:

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

Bây giờ, khi bạn làm

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

sơ thẩm pb được một tài sản userData và cũng thừa hưởng các phương pháp từ PhysicsBody.prototype (pbMethod trong trường hợp này).


Khi bạn làm

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

sơ thẩm db được một tài sản userData và cũng thừa hưởng các phương pháp từ DynamicBody.prototype (dbMethod trong trường hợp này), mà lần lượt được thừa hưởng từ PhysicsBody.prototype.

+0

Tuyệt vời, cảm ơn thời gian của bạn! – Jem

+0

Rực rỡ! Điều này đã loại trừ tôi từ thời cổ đại, nhưng nó rất đơn giản .. * faceslap * –

+0

@ Lars-Erik Thành thật mà nói, đó là một mớ hỗn độn :-). Phiên bản sắp tới của JavaScript (ECMAScript 6) sẽ mang lại cú pháp lớp, điều này sẽ làm cho mẫu này đơn giản hơn nhiều. –

10

Nếu tôi hiểu bạn một cách chính xác, bằng cách nói rằng bạn muốn kế thừa các đối số nhà xây dựng phụ huynh, bạn có nghĩa là new DynamicBody(1, 2, 3) sẽ nội bộ gọi PhysicsBody(1, 2, 3) cho DynamicBody dụ.

Điều này có thể được thực hiện bằng cách sử dụng .apply và đi qua arguments dọc theo: http://jsfiddle.net/pmkrQ/.

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

Xin cảm ơn, không biết về điều đó! – Jem

Các vấn đề liên quan