在下面的代码中,initializeBoard
可以访问该属性,并且当我启动脚本时控制台返回“白色”。但是当我在窗口内单击时,我得到“未定义”。我错过了什么明显的事情? (奖励:无需询问就能让我找到答案的搜索查询是什么?)
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;
}
最佳答案
this
的值由函数被调用 的方式决定,而不是由它首次赋值的位置决定。
您正在复制(对)函数的document.onclick
。
当点击事件发生时 document.onclick
被调用。 view.click
未 被调用(即使它与 document.onclick
具有相同的值)。这意味着 this
是 document
而不是 view
。
使用bind
如果你想创建一个包装函数来在正确的上下文中调用原始函数。
document.onclick = view.click.bind(view);
关于javascript - 为什么我的方法看不到 this.property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27295052/