我有一个名为'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');
};
如果我将baseScreen加载为,则在onLoad
中
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
并在第4行打印时奇怪地console.log(this)
的行上抛出错误window
对象而不是baseScreen
或registerScreen
对象。
我的代码有什么问题?我是否需要覆盖load,在我的派生类中调整大小? (试过这个,但失败了)或其他任何问题?
答案 0 :(得分:4)
或者,您也可以将@ felix-kling提及的呼叫替换为:
goog.base(this);
完全相同。
关于goog.base的一个注释,来自docs:
如果从构造函数调用它,则会使用参数1-N调用超类构造函数。如果从原型方法调用此方法,则必须将方法的名称作为第二个参数传递给此函数。如果不这样做,您将收到运行时错误。
另见:
答案 1 :(得分:2)
您必须在当前baseScreen
实例中调用registerScreen
:
digient.casino.ui.baseScreen.call(this);
否则,您的函数调用等同于digient.casino.ui.baseScreen()
,因此this
引用全局对象window
。