面向对象的Javascript - 如何定义类中的类?来自C#的例子

时间:2009-08-24 15:32:11

标签: javascript oop

我知道有很多OO javascript问题,而且我已经阅读了很多资源....但是到目前为止它仍然是我最长的学习曲线!

我不是经典的训练对不起,因此我必须向你们展示c#我想要实现的一个例子。

我希望你能帮忙!

public class Engine
{
    public int EngineSize;

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

    public Car()
    {
        engine = new Engine();
    }
}
我并不是真的担心私人/公共场所。上述C#示例的命名约定。

我想知道的是如何在Javascript中复制这个结构?

谢谢!

4 个答案:

答案 0 :(得分: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 :(得分:3)

所以你真的只想知道一个对象如何包含另一个对象?这是一个非常简单的样本转换:

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

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

var myCar=new Car();

答案 2 :(得分:1)

这是ES6的答案:

 geoApiContext = new GeoApiContext.Builder()
                .apiKey(context.getResources().getString(R.string.api_key))
                .build();

        DirectionsApiRequest request = DirectionsApi.newRequest(geoApiContext)
                .origin(origin)
                .destination(dest)
                .mode(mode)
                .alternatives(altroutes);

        try{
            DirectionsResult result = request.await();
            
        }catch(Exception e){
            e.printStackTrace();
        } 

(希望我喜欢一些补充)

答案 3 :(得分: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;

何时制作新的Car实例。 Car构造函数将创建Engine的新实例并将其分配给Car实例的Engine属性。