1

我有一个名为“baseScreen”的基类,如下所示:

digient.casino.ui.baseScreen = function() {
    goog.debug.Logger.getLogger('demo').info('baseScreen');
    this.background                             =   goog.dom.createDom('div', {'class': 'backgroundHolder'}, '');
    console.log(this);
}

digient.casino.ui.baseScreen.background         =   null;

digient.casino.ui.baseScreen.prototype.load     =   function() {
    var self                                    =   this;
    goog.debug.Logger.getLogger('demo').info('baseScreen : load');
    goog.dom.appendChild(document.body, this.background);
    <!-- screen setup code goes here -->
};

digient.casino.ui.baseScreen.prototype.resize  =   function(newSize) {
    goog.debug.Logger.getLogger('demo').info('baseScreen : resize');
};

onLoad,如果我将 baseScreen 加载为

var sc = new digient.casino.ui.baseScreen();
sc.load();

它工作正常。

然后我导出一个屏幕,命名registerScreen如下:

digient.casino.ui.registerScreen = function() {                                                     
    goog.debug.Logger.getLogger('demo').info('registerScreen');                                     
    digient.casino.ui.baseScreen.call();
};                                                                                                  
goog.inherits(digient.casino.ui.registerScreen, digient.casino.ui.baseScreen); 

当我尝试加载 的对象时registerScreen,它会在我尝试附加this.background到的行上抛出一个错误,document.body并且奇怪console.log(this)的是在第 4 行打印window对象而不是baseScreenregisterScreen对象。

我的代码有什么问题?我是否需要在派生类中覆盖加载、调整大小?(试过这个,但失败)或任何其他问题?

4

2 回答 2

4

或者,您也可以将@felix-kling 提到的调用替换为:

goog.base(this);

它做同样的事情。

来自文档的关于 goog.base 的一条注释:

如果 this 从构造函数中调用,则 this 使用参数 1-N 调用超类构造函数。如果这是从原型方法调用的,那么您必须将方法的名称作为第二个参数传递给该函数。如果不这样做,您将收到运行时错误。

也可以看看:

于 2013-10-09T05:27:58.807 回答
2

您必须调用baseScreenwill 当前registerScreen实例:

digient.casino.ui.baseScreen.call(this);

否则,您的函数调用等效于digient.casino.ui.baseScreen(),因此this指的是全局对象window

于 2012-06-25T12:45:34.100 回答