[ACCEPTED]-Javascript nested class-javascript
If you want the prototype definition of 10 the inner nested classes to be not accessible 9 from outside the outer class, as well as 8 a cleaner OO implementation, take a look 7 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);
This way you can have prototype inheritance and nested classes so that 6 classes defined within BobsGarage.Car
are not accessible 5 outside the constructor of BobsGarage.Car
but instances 4 of them are accessible to derived classes, as 3 shown in the test code.
Note: I am referring 2 to the concept of Class in Javascript as defined 1 on the MDN.
use this.myObjB instead of var myObjB
0
var objA = {
myObjB: {
testPrint: function(){
print("Inside test print");
}
}
};
objA.myObjB.testPrint();
0
If you're trying to do inheritance then 2 you may want to consider the prototype keyword.
var myObjB = function(){
this.testPrint = function () {
print ( " Inside testPrint " );
}
}
var myObjA = new myObjB();
myObjA.prototype = {
var1 : "hello world",
test : function(){
this.testPrint(this.var1);
}
}
(i 1 hope that made sense)
Your definition of TestA does not expose 2 any public members. To expose myObjB, you 1 need to make it public:
function TestA() {
this.myObjB = new TestB();
}
var objA = new TestA();
var objB = objA.myObjB;
this is another way to do that.
class A {
constructor(classB) {
this.ObjB = classB
}
}
class B {
Hello() {
console.log("Hello from class B")
}
}
let objA = new A(new B())
objA.ObjB.Hello()
0
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.