为什么我的方法看不到这个属性

Why is my method not seeing this.property?

本文关键字:属性 看不到 我的 方法 为什么      更新时间:2023-09-26

在下面的代码中,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;
}

this的值由函数的调用方式决定,而不是由首次分配函数的位置决定。

您正在将(引用)函数复制到document.onclick

当单击事件发生时document.onclick被调用。 调用view.click(即使它具有与 document.onclick 相同的值)。这意味着this documentview

如果要

创建在正确的上下文中调用原始函数的包装函数,请使用 bind

document.onclick = view.click.bind(view);