我很难弄清楚为什么会出现此错误。我确保 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/