Javascript 回调函数中的上下文

Javascript 回调函数中的上下文,javascript,Javascript,我正在处理一个API,它是实例上返回回调函数的方法 myPlayer.onPlay(function() { console.log(this) }) 现在我希望它的上下文是播放器,但它不是,它是回调函数。我尝试过像这样绑定上下文,但也不起作用 我希望这是myPlayer,因为这是执行onPlay函数的上下文 myPlayer.onPlay(function() { console.log(this) }).bind(thi

我正在处理一个API,它是实例上返回回调函数的方法

   myPlayer.onPlay(function() {
            console.log(this)
        })
现在我希望它的上下文是播放器,但它不是,它是回调函数。我尝试过像这样绑定上下文,但也不起作用

我希望这是myPlayer,因为这是执行onPlay函数的上下文

myPlayer.onPlay(function() {
        console.log(this)
    }).bind(this)
如何使上下文成为播放器的实例?我遗漏了什么吗?

你必须这样做

myPlayer.onPlay(
函数(){
console.log(this);
}.bind(我的播放器)
);

由于您没有提供
.onPlay
将返回的内容,我认为它不会返回带有
绑定方法的对象。因此,必须对函数本身使用
bind
。如果您希望它成为
myPlayer
,则不能在绑定中使用
this
,因为在您当前的调用范围
中,this
并不意味着什么。它可能意味着什么,但很可能不是玩家,否则你会这样做。
this.onPlay
。您必须使用
bind
绑定
myPlayer
,而不是
this

通常
。绑定(this)
是正确的解决方案。您还可以使用箭头功能,它会自动绑定此
。如果您的解决方案不起作用,您需要在函数上发布。您需要调用
.bind()
,而不是在
.onPlay()
的返回值上。如果要将
绑定到播放机,则需要使用
.bind(myPlayer)
。尽管如此,您应该只引用函数中的
myPlayer
变量,而不是
this
。这取决于myPlayer正在做什么……“我希望这是myPlayer,因为这是执行onPlay函数的上下文?”-不。我们不知道
onPlay
如何调用其回调,您尚未共享其代码(或链接库文档)。代码中没有任何内容指示
这个
值在内部会变成什么。@Bergi Right。可能是
myPlayer.onPlay(函数(){…}.bind(this))
myPlayer.onPlay(()=>{…})