2009-08-24 8 views
6

Je sais qu'il y a beaucoup de questions OO javascript sur SO et j'ai lu beaucoup de ressources .... MAIS c'est encore loin ma courbe d'apprentissage la plus longue jusqu'à présent! Je n'ai pas de formation classique désolé, donc je vais devoir vous montrer les gars dans C# un exemple de ce que je veux réaliser.JavaScript orienté objet - Comment définir une classe dans une classe? à partir d'un exemple C#

J'espère que vous pouvez aider!

public class Engine 
{ 
    public int EngineSize; 

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

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

les gars, je ne suis pas vraiment inquiet au sujet des & privés/publics conventions de nommage de l'exemple ci-dessus C#.

Tout ce que je veux savoir, c'est comment répliquer cette structure en Javascript?

Merci!

+0

Est-ce supposé être C#? Quelles sont les parens après 'public class ...'? –

Répondre

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

J'aime mieux que les autres exemples ici car il utilise la capacité javascript pour fournir un espace de noms privé qui n'est pas accessible de l'extérieur. J'aurais aussi montré la même chose avec la voiture, mais au moins votre privateVar montre des informations qui se cachent. – PanCrit

3

Alors vous voulez vraiment savoir comment un objet peut en contenir un autre? Voici une conversion très simple de votre échantillon:

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; 

Lorsque vous ferez une nouvelle instance de voiture. Le constructeur de voiture créera une nouvelle instance de Engine et l'assignera à la propriété Engine de l'instance Car.

Questions connexes