2009-08-24 16 views
6

So che ci sono un sacco di domande javascript OO su SO e io ho letto un sacco di risorse .... MA è ancora molto lontano dalla mia curva di apprendimento più lunga finora!Javascript orientato agli oggetti - Come definire una classe all'interno di una classe? da un esempio C#

Non sono spiacente classicamente addestrato, quindi dovrò semplicemente mostrarvi ragazzi in C# un esempio di ciò che voglio ottenere.

Spero che tu possa aiutare!

public class Engine 
{ 
    public int EngineSize; 

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

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

ragazzi io non sono davvero preoccupato per le pubbliche & convenzioni private/denominazione di cui sopra C# esempio.

Tutto quello che voglio sapere è come replicare questa struttura in Javascript?

Grazie!

+0

Si suppone che sia C#? Quali sono i paren dopo "public class ..."? –

risposta

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

Mi piace meglio degli altri esempi qui perché utilizza la capacità di javascript per fornire uno spazio dei nomi privato che non è accessibile dall'esterno. Avrei anche mostrato la stessa cosa con l'auto, ma almeno la tua privateVar dimostra di nascondersi. – PanCrit

3

Quindi vuoi davvero sapere come un oggetto può contenere un altro? Ecco una semplice conversione del campione:

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; 

Quando si farà nuova istanza auto. Il costruttore dell'auto creerà una nuova istanza di Engine e la assegnerà alla proprietà Engine dell'istanza Car.

Problemi correlati