tags:

views:

185

answers:

3

Hi there,

I know there are a lot of OO javascript questions on SO and I a have been reading a lot of resources.... BUT it is still far my most long winded learning curve so far!

I am not classically trained sorry, hence I will have to just show you guys in c# an example of what I want to acheive.

I hope you can help!

public class Engine
{
    public int EngineSize;

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

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

guys I am not really worried about the private/public & naming conventions of the above C# example.

All I want to know is how to replicate this structure in Javascript?

Thanks!

+3  A: 

So you really just want to know how one object can contain another? Here's a very simple conversion of your sample:

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

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

var myCar=new Car();
Paul Dixon
A: 
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;

When you will make new Car instance. Car constructor will create new instance of Engine and assign it to Engine property of Car instance.

Eldar Djafarov
+5  A: 
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();
CMS
I like this better than the other examples here because it uses javascript ability to provide a private namespace that isn't accessible from the outside. I'd have showed the same thing with the car as well, but at least your privateVar demonstrates information hiding.
PanCrit