2010-02-13 41 views
57

Cách tốt nhất để mở rộng lớp javascript là gì để Lớp B kế thừa mọi thứ từ lớp A (lớp B mở rộng A)?Javascript mở rộng lớp

+3

Thực tế ... có cách nào khác nhưng b.prototype = new a; – xpepermint

+1

JavaScript không có lớp. Do đó, toàn bộ câu hỏi này không có ý nghĩa. Bạn đang nói về Java? Hoặc ActionScript? Những người * làm * có các lớp học, nhưng họ hoàn toàn không có gì để làm với JavaScript. Hay bạn đang nói về một số thư viện JavaScript thực hiện OO dựa trên lớp trong JavaScript, ví dụ như MooTools? Trong trường hợp đó, câu trả lời phụ thuộc vào thư viện mà bạn đang nói đến. –

+0

Có đối tượng Class của tôi: https://github.com/reduardo7/sjsClass/blob/master/sjsclass.js –

Trả lời

27

Douglas Crockford có một số lời giải thích rất tốt của thừa kế trong JavaScript:

  1. prototypal inheritance: cách 'tự nhiên' để làm những việc trong JavaScript
  2. classical inheritance: gần gũi hơn với những gì bạn tìm thấy trong hầu hết các ngôn ngữ OO, nhưng loại chạy ngược lại các hạt của JavaScript
1
extend = function(destination, source) { 
      for (var property in source) { 
      destination[property] = source[property]; 
      } 
      return destination; 
    }; 

Extending JavaScript

Bạn cũng có thể thêm bộ lọc vào vòng lặp for.

+8

Đây không phải là những gì OP hỏi và cũng không chính xác "mở rộng" - bạn nên lặp qua Object.keys hoặc ít nhất là kiểm tra hasOwnProperty –

+0

Nhu cầu hasOwnProperty kiểm tra và sẽ ghi đè lên các phương thức và thuộc tính nếu chúng giống nhau, không có khả năng gọi phương thức siêu lớp sau này. –