为什么需要在setInterval中使用方法函数绑定?

时间:2017-11-07 11:38:01

标签: javascript

以下是工作代码示例:

function Drum(){
  this.noise = 'boom';
  this.duration = 1000;
  this.goBoom = function(){console.log(this.noise)};
}
var drum = new Drum();
setInterval(drum.goBoom.bind(drum), drum.duration);

如果我从此代码中移除.bind(drum)部分而不是“ boom ”,我将在控制台中获取“ undefined ”。 自typeof drum.goBoom返回'功能'以来这种行为的原因是什么?

2 个答案:

答案 0 :(得分:2)

  

因为typeof drum.goBoom返回'function'

这实际上是无关紧要的。 this关键字的值在此处很重要。您通过传递drum.goBoom作为setInterval函数的第一个参数来传递函数引用,而不使用bind手动设置this关键字的值setInterval使用全局对象调用该函数,因为它的this值(上下文)没有noise个关键字,因此console.log会记录undefined

答案 1 :(得分:1)

查看bind的文档。

  

bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。 / p>

如果省略bind(drum),则回调中的this将是您想要的drum对象以外的其他内容。