Javascript Nested Class

How to define a nested class in Java Script.

Here is the code snippet that I have:

objA = new TestA();

function TestB ()
{
   this.testPrint = function ()
  {
     print ( " Inside testPrint " );
  }
}

function TestA ()
{
   var myObjB = new TestB();
}

Now I am trying to access testPrint using objA

objA.myObjB.testPrint();

But its outstanding error "objA has no properties"

How can I access testB method using objA handler?

+5
source share
5 answers

If you want the prototype definition of inner nested classes not to be accessible from outside the outer class, as well as a simpler OO implementation, take a look at this.

var BobsGarage = BobsGarage || {}; // namespace

/**
 * BobsGarage.Car
 * @constructor
 * @returns {BobsGarage.Car}
 */
BobsGarage.Car = function() {

    /**
     * Engine
     * @constructor
     * @returns {Engine}
     */
    var Engine = function() {
        // definition of an engine
    };

    Engine.prototype.constructor = Engine;
    Engine.prototype.start = function() {
        console.log('start engine');
    };

    /**
     * Tank
     * @constructor
     * @returns {Tank}
     */
    var Tank = function() {
        // definition of a tank
    };

    Tank.prototype.constructor = Tank;
    Tank.prototype.fill = function() {
        console.log('fill tank');
    };

    this.engine = new Engine();
    this.tank = new Tank();
};

BobsGarage.Car.prototype.constructor = BobsGarage.Car;

/**
 * BobsGarage.Ferrari
 * Derived from BobsGarage.Car
 * @constructor
 * @returns {BobsGarage.Ferrari}
 */
BobsGarage.Ferrari = function() {
    BobsGarage.Car.call(this);
};
BobsGarage.Ferrari.prototype = Object.create(BobsGarage.Car.prototype);
BobsGarage.Ferrari.prototype.constructor = BobsGarage.Ferrari;
BobsGarage.Ferrari.prototype.speedUp = function() {
    console.log('speed up');
};

// Test it on the road

var car = new BobsGarage.Car();
car.tank.fill();
car.engine.start();

var ferrari = new BobsGarage.Ferrari();
ferrari.tank.fill();
ferrari.engine.start();
ferrari.speedUp();

// var engine = new Engine(); // ReferenceError

console.log(ferrari);

, , , BobsGarage.Car, BobsGarage.Car, , .

. Javascript, MDN.

+10

this.myObjB var myObjB

+7

:

var objA = {
    myObjB: {
       testPrint: function(){
          print("Inside test print");
       }
    }
};

objA.myObjB.testPrint();
+3

, .

var myObjB = function(){
    this.testPrint = function () {
       print ( " Inside testPrint " );
    }
}

var myObjA = new myObjB();
myObjA.prototype = {
   var1 : "hello world",
   test : function(){
      this.testPrint(this.var1);
   }
}

(, )

+1

TestA . myObjB, :

function TestA() {
    this.myObjB = new TestB();
}
var objA = new TestA();
var objB = objA.myObjB;
+1

All Articles