开发者问题收集

未捕获的类型错误无法读取未定义的属性“body”

2014-01-24
2104

我很难弄清楚为什么会出现此错误。我确保 JavaScript 在 html 之后加载,我甚至尝试用 document 和 window 替换 this.doc 和 this.win,但结果没有改变。这是我正在使用的代码。它是在 <head> 中通过 <script src="window.js" type="text/javascript"></script> 实现的(我也在文档末尾尝试过)

Window = function(doc, win)
{
    this.doc = doc;
    this.win = win;
    
    this.resize();
    this.win.addEventListener('resize', this.resize);
}

Window.prototype = 
{
    resize: function()
    {
        this.doc.body.innerHTML = window.innerHeight;
    }
};

window.onload = new Window(document, window);

任何帮助都将不胜感激。

1个回答

这是因为在调用回调时 this 不是 Window 对象,而是全局对象 ( window )。解决方案是 绑定 函数:

this.win.addEventListener('resize', this.resize.bind(this));

如果您确实需要与 IE8 兼容,请执行以下操作:

var _this = this;
this.win.addEventListener('resize', function(){_this.resize() });

但您的全局构造会引发警报。请注意不要构建无用的冗长类“java 风格”。您真的需要这个 Window 类吗?

Denys Séguret
2014-01-24