Объектно-ориентированный Javascript - Как определить класс внутри класса? из примера C # - PullRequest
6 голосов
/ 24 августа 2009

Я знаю, что на SO есть много вопросов о JavaScript, и я уже читал много ресурсов ... НО это пока еще моя самая длинная кривая обучения на данный момент!

Я не обучен классическому извинению, поэтому мне просто нужно показать вам, ребята, на c # пример того, чего я хочу достичь.

Я надеюсь, что вы можете помочь!

public class Engine
{
    public int EngineSize;

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

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

ребята, меня не очень беспокоит соглашение о частных / публичных именах в вышеприведенном примере C #.

Все, что я хочу знать, это как воспроизвести эту структуру в Javascript?

Спасибо!

Ответы [ 3 ]

15 голосов
/ 24 августа 2009
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();
3 голосов
/ 24 августа 2009

То есть вы действительно хотите знать, как один объект может содержать другой? Вот очень простое преобразование вашего образца:

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

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

var myCar=new Car();
0 голосов
/ 24 августа 2009
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;

Когда вы сделаете новый экземпляр автомобиля. Конструктор автомобилей создаст новый экземпляр Engine и назначит его свойству Engine экземпляра Car.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...