新秀警报。在下面的代码中,initializeBoard可以访问该属性,并且当我启动脚本时控制台返回'white'。但当我在窗口内点击时,我得到'未定义'。我错过了什么令人头疼的事情? (额外奖励:搜索查询是什么让我得到答案而不必问?)
var view = {
currentMove: 'white',
initializeBoard: function() {
console.log(this.currentMove);
},
click: function(e) {
console.log(this.currentMove);
}
}
window.onload = function() {
view.initializeBoard();
document.onclick = view.click;
}
答案 0 :(得分:3)
this
的值取决于函数的调用方式,而不是首次指定的位置。
您将(引用)功能复制到document.onclick
。
当点击事件发生时document.onclick
被调用。 view.click
不被调用(即使它与document.onclick
具有相同的值)。这意味着this
document
不是view
。
如果要创建一个在正确的上下文中调用原始函数的包装函数,请使用bind
。
document.onclick = view.click.bind(view);