javascript - 未捕获的类型错误无法读取未定义的属性 'body'

标签 javascript html dom-events

我很难弄清楚为什么会出现此错误。我确保 JavaScript 在 html 之后加载,我什至尝试用文档和窗口替换 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);

任何帮助将不胜感激。

最佳答案

这是因为回调调用时this不是Window对象,而是全局对象(window)。解决方案是 bind功能:

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

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

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

但是你的全局构造引起了警报。小心不要构建无用的“java 风格”的冗长类。您真的需要这个 Window 类吗?

关于javascript - 未捕获的类型错误无法读取未定义的属性 'body',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21336401/

相关文章:

javascript - Polymer 1.0 Dom-if 检查属性

jquery - 按钮和导航在网站的移动版本中关闭

javascript - 如何让我的导航栏在不同的屏幕尺寸上居中

Javascript 全局(主体)点击事件注册在 Safari 中不起作用

javascript - TypeError : window. require 不是函数

javascript - 如何重置 Canvas 上下文的比例?

javascript - 传单触摸事件未触发

javascript - 多个 Google 标记不会使用拖动监听器更新位置

javascript - 具有重复字符的字符串之间的js正则表达式

html - 组合 div :after with url link and hover selector