在 javascript 函数中绑定“this” [duplicate]

Binding 'this' in javascript function [duplicate]

提问人:etayluz 提问时间:5/9/2022 更新时间:5/9/2022 访问量:58

问:

我有一个函数:

 interval(duration, fn) {
  var _this = this
  this.baseline = undefined
  
  this.run = function(){
    if(_this.baseline === undefined){
      _this.baseline = new Date().getTime()
    }
    fn()
    var end = new Date().getTime()
    _this.baseline += duration

    var nextTick = duration - (end - _this.baseline)
    if(nextTick<0){
      nextTick = 0
    }
    
    _this.timer = setTimeout(function(){
      _this.run(end)
    }, nextTick)
  }

  this.stop = function(){
    clearTimeout(_this.timer)
  }
}

现在,当我这样调用此函数时:

var timer = new this.interval(this.tempo, function(){
        this.audio.pause()
        this.playBackground()
      })

我需要以某种方式绑定“this”,以便它可以访问,以便我可以调用this.audio.pause()

如何绑定才能访问它?this

javascript 绑定

评论

1赞 VLAZ 5/9/2022
fn() -> fn.call(this)如果你想在回调中使用它,不管它来自哪里。 -> 如果您只想在类中定义。thisnew this.interval(this.tempo, function(){new this.interval(this.tempo, () =>{time
3赞 VLAZ 5/9/2022
顺便说一句 - 我不建议使用 .您似乎已经在使用 ES6 兼容代码,因此没有理由避免使用 和 。varconstlet
0赞 etayluz 5/9/2022
@VLAZ你能写出解决方案吗?我尝试替换,但没有用fn()fn.call(this)
0赞 VLAZ 5/9/2022
我明白了,应该是因为你正在混叠并且你有一个额外的功能。副本非常详细地涵盖了您需要了解的所有内容,以及如何在通话时确定它,以及如何正确使用它。fn.call( _this )thisthis

答: 暂无答案