为什么我的方法没有看到this.property?

时间:2014-12-04 13:17:49

标签: javascript javascript-events this

新秀警报。在下面的代码中,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;
}

1 个答案:

答案 0 :(得分:3)

this的值取决于函数的调用方式,而不是首次指定的位置。

将(引用)功能复制到document.onclick

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

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

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