2009-08-24 49 views
6

Tôi biết có rất nhiều câu hỏi về OO javascript trên SO và tôi đã đọc rất nhiều tài nguyên .... NHƯNG nó vẫn là đường cong học tập dài nhất của tôi cho đến nay!Javascript hướng đối tượng - Cách xác định một lớp trong lớp học? từ một ví dụ C#

Tôi không được đào tạo về mặt cổ điển, vì vậy tôi sẽ phải chỉ cho các bạn thấy trong C# ví dụ về những gì tôi muốn đạt được.

Tôi hy vọng bạn có thể trợ giúp!

public class Engine 
{ 
    public int EngineSize; 

    public Engine() 
    { 
    } 
} 
public class Car 
{ 
    public Engine engine; 

    public Car() 
    { 
     engine = new Engine(); 
    } 
} 

guys Tôi không thực sự lo lắng về việc riêng tư/công khai & quy ước đặt tên của ví dụ trên C#.

Tất cả những gì tôi muốn biết là cách sao chép cấu trúc này trong Javascript?

Cảm ơn!

+0

Đây có phải là C# không? Parens là gì sau khi 'public class ...'? –

Trả lời

15
function Engine(size) { 
    var privateVar; 

    function privateMethod() { 
     //... 
    } 

    this.publicMethod = function() { 
     // with access to private variables and methods 
    }; 

    this.engineSize = size; // public 'field' 
} 

function Car() { // generic car 
    this.engine = new Engine(); 
} 

function BMW1800() { 
    this.engine = new Engine(1800); 
} 

BMW1800.prototype = new Car(); // inherit from Car 


var myCar = new BMW1800(); 
+1

Tôi thích điều này tốt hơn so với các ví dụ khác ở đây vì nó sử dụng khả năng javascript để cung cấp một không gian tên riêng mà không thể truy cập từ bên ngoài. Tôi đã cho thấy điều tương tự với chiếc xe là tốt, nhưng ít nhất privateVar của bạn thể hiện ẩn thông tin. – PanCrit

3

Vì vậy, bạn thực sự chỉ muốn biết một đối tượng có thể chứa một đối tượng khác như thế nào? Đây là một sự chuyển đổi rất đơn giản của mẫu của bạn:

function Engine() 
{ 
    this.EngineSize=1600; 
} 

function Car() 
{ 
    this.engine=new Engine(); 
} 

var myCar=new Car(); 
0
function Engine(){ // this is constructor. Empty since Engine do nothing. 
} 
Engine.prototype.EngineSize=null; // this is public property 

function Car(){ // this is Car constructor. It initializes Engine instance and stores it in Engine public property 
    this.Engine =new Engine(); 
} 

Car.prototype.Engine =null; 

Khi nào bạn sẽ làm cho dụ xe mới. Nhà xây dựng ô tô sẽ tạo ra phiên bản mới của Engine và gán nó cho thuộc tính Engine của cá thể Car.

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