javascript - 为什么我的方法看不到 this.property?

标签 javascript this dom-events

在下面的代码中,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 具有相同的值)。这意味着 thisdocument 而不是 view

使用bind如果你想创建一个包装函数来在正确的上下文中调用原始函数。

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

关于javascript - 为什么我的方法看不到 this.property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27295052/

相关文章:

javascript - Redux saga 事件 channel 在执行另一个 saga 后终止

javascript - 水平滚动表上的 "Sticky"标题...完全不可能?

objective-c - 从 Objective C 的类方法中引用类本身

javascript - 避免执行事件的默认操作。 `event.cancelable` 与 `event.preventDefault`?

javascript - 更新数组中对象的更干净的方法

javascript - 调用多个 Google Cloud Run 请求是否会调用容器的新实例

Javascript 图表库

c++ - 改变这是什么

javascript - jquery的微小实现

条件满足时的 Javascript 重定向