当前位置:  开发笔记 > 编程语言 > 正文

Javascript嵌套类

如何解决《Javascript嵌套类》经验,为你挑选了2个好方法。

如何在Java Script中定义嵌套类.

这是我的代码片段:

objA = new TestA();

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

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

现在我尝试使用objA访问testPrint

objA.myObjB.testPrint();

但它给出错误"objA没有属性"

如何使用objA处理程序访问testB方法?



1> Lorenzo Poli..:

如果您希望无法从外部类外部访问内部嵌套类的原型定义,以及更清晰的OO实现,请查看此内容.

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但派生类可以访问它们的实例,如测试代码中所示.

注意:我指的是MDN中定义的Javascript中的Class概念.



2> Leo..:

使用this.myObjB而不是var myObjB

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有