使用谷歌闭包进行多级继承

时间:2014-05-22 15:29:42

标签: javascript inheritance multiple-inheritance google-closure-compiler multi-level

我想使用google closure实现多重继承。我已经研究过了,我找到了book。在第158页,他们说谷歌关闭不支持多重继承,但还有其他方法可以做到这一点,比如使用“goog.mixin”。我尝试了但是我得到了“Uncaught AssertionError:Failure”。

基本上,我想做这样的事情:

class A {
    function moveLeft() {
        ...
    },
    function moveRight() {
        ...
    }
}

class B extends A {
    function moveTop() {
        ...
    }
}

class C extends B {
    function moveBottom() {
        ...
    }
}
  • A类的方法是“moveLeft”和“moveRight”。
  • B类的方法有“moveLeft”,“moveRight”和“moveTop”(正常继承,从父类A获取方法)
  • C类应具有方法“moveLeft”,“moveRight”,“moveTop”和“moveBottom”(双重继承,从父类B获取方法,以及祖父母类A)

但是C类只能像我一样得到B类的方法。

我怎么能用谷歌关闭呢?

谢谢。

若昂


编辑1

我会尽力使自己更清楚。出于职业原因,我无法在这里显示整个代码。这有点我的课程的样子。

// external file xgis.js

xgis = {};


// xgis.map
xgis.map = function(options) {
    // map definitions ...
};
// Inherits from ol.Map
goog.inherits(xgis.map, ol.Map);


// xgis.layer
xgis.layer = function(options) {
    // base layer definitions
};


// xgis.layer.osm
xgis.layer.osm = function(options) {
    goog.base(this, {
        source: new ol.source.OSM()
    });
    sigga.layer.call(this, options);
};
// Inherits from ol.layer.Tile
goog.inherits(xgis.layer.osm, ol.layer.Tile);
/**
 * Copies all the members of a source object to a target object.
 * i.e, inherits ALSO from xgis.layer (the base layer class)
 */
goog.mixin(xgis.layer.osm.prototype, xgis.layer.prototype);

目标是构建一个SDK,我在这里命名为“xgis”。我们希望在OpenLayers 3(ol3)之上构建我们的API。我们希望自己的方法使用ol3方法。我们需要有自己的记录方法。

例如,我想要自己的方法来检查图层的可见性。但是这种方法必须使用ol3“与我同名”的方法:

// My method
xgis.layer.prototype.getVisible = function() {
    // Used the method of the parent class from ol3
    return this.superClass_.getVisible();
};

我尝试使用关键字“superClass_”来获取父类的方法,但它不起作用。

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

你能把你的例子写成有效的JavaScript吗?据我所知,这不是“多重继承”,而是简单的多层继承。

我认为你的意思是:

function A() {}
A.prototype.moveLeft = function() {};

function B() {}
goog.inherits(B, A);
A.prototype.moveTop = function() {};

function C() {}
goog.inherits(C, B);
A.prototype.moveBottom = function() {};