2009-08-24 12 views
6

Sé que hay muchas preguntas OO de JavaScript en SO y he estado leyendo muchos recursos ... ¡PERO todavía es mi curva de aprendizaje más larga hasta ahora!Javascript orientado a objetos: ¿cómo definir una clase dentro de una clase? de un ejemplo de C#

No estoy entrenado clásicamente lo siento, por lo tanto tendré que mostrarles a ustedes en C# un ejemplo de lo que quiero lograr.

¡Espero que puedan ayudar!

public class Engine 
{ 
    public int EngineSize; 

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

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

chicos no estoy realmente preocupado por las convenciones públicas & privados/denominación de la C# ejemplo anterior.

Todo lo que quiero saber es cómo replicar esta estructura en Javascript?

Gracias!

+0

¿Se supone que es C#? ¿Qué son los parens después de 'public class ...'? –

Respuesta

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

Me gusta más que los otros ejemplos aquí porque usa la capacidad de javascript para proporcionar un espacio de nombres privado al que no se puede acceder desde el exterior. También habría mostrado lo mismo con el auto, pero al menos tuVar privada demuestra ocultamiento de información. – PanCrit

3

¿De verdad solo quieres saber cómo un objeto puede contener a otro? Aquí hay una muy simple conversión de la muestra:

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; 

Cuando va a hacer nueva instancia de coches. El constructor del coche creará una nueva instancia de Engine y la asignará a la propiedad Engine de la instancia Car.

Cuestiones relacionadas