Object Oriented Javascript - How To Define A Class

2020-02-26 12:11发布

问题:

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!

回答1:

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();


回答2:

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();


回答3:

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.