我正在用JavaScript练习bind,遇到一个问题。

var test = {
  val: 1
}
function bindTest () {
  console.log(this.val)
}
bindTest.bind(test)()


在这个小演示中,我得到1作为返回值。

但是,当我尝试在事件处理程序上使用bind时,bind将无法正常工作。
例如

var container = document.querySelector('.container'),
    test = {val: 1}
function bindTest (event) {
  console.log(this.val)
}
container.addEventListener('click', bindTest.bind(test))


在这种情况下,bindTest中的this变为window。我知道bind用于创建this point to its bind object的新功能。为什么在申请事件处理程序后会得到不同的答案?

最佳答案

在bindTest.bind(test)之后添加括号

var container = document.querySelector('.container'),
    test = {val: 1}
function bindTest () {
  console.log(this.val)
}
container.addEventListener('click', bindTest.bind(test)())


两种情况我们都将得到答案1。

关于javascript - 两种绑定(bind)用法之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44719164/

10-11 05:54