Javascript 对动态对象的回调
如何使this.b的回调方法指向this.a的成员,而不管this.a是否替换为新实例?换句话说,它是动态解决的吗 我知道如何在其他语言中做到这一点,但出于某种原因,在Javascript中,我似乎无法理解这一点 [编辑] 问题似乎有所不同。回调函数已经在对象的原型中声明。但是现在我已经把我认为的问题隔离了 下面您可以看到我的对象中的一段代码。它包含2个成员对象。一个播放器和一个波形。播放器是在新url可用后动态实例化的东西。我希望波形向this.player的成员发出一个名为“seek”的回调,即使在对象更改之后也是如此 这似乎不起作用:Javascript 对动态对象的回调,javascript,dynamic,callback,Javascript,Dynamic,Callback,如何使this.b的回调方法指向this.a的成员,而不管this.a是否替换为新实例?换句话说,它是动态解决的吗 我知道如何在其他语言中做到这一点,但出于某种原因,在Javascript中,我似乎无法理解这一点 [编辑] 问题似乎有所不同。回调函数已经在对象的原型中声明。但是现在我已经把我认为的问题隔离了 下面您可以看到我的对象中的一段代码。它包含2个成员对象。一个播放器和一个波形。播放器是在新url可用后动态实例化的东西。我希望波形向this.player的成员发出一个名为“seek”的回调
this.a = new A()
this.b = new B()
// point b callback to a member of object a
this.b.setCallback(this.a.mycallback)
// initiate callback
this.b.doCallback() // calls this.a->mycallback()
// ..... later on
// replace this.a with a new object
this.a = new A()
// callback is broken now?
this.b.doCallback()
。。。
但是,一旦我使用匿名函数设置了seek选项,它就会起作用:
// placeholder, object is instantiated later
this.player = {}
var self = this
this.waveform = new Waveform(this.waveformDiv, {
seek : self.player.seek,
})
// after this point this.player can be instantiated multiple times with
// different Player objects. I want the callback to seek to point to the new instance.
我想了解为什么这两种方法根本不同。将mycallback添加到A的原型中 A.prototype.mycallback=函数(…){…}
在此之后,A的任何实例都将有我的回调。我想我现在可以回答我自己的问题了
seek : function(time){ self.player.seek(time)},
这将创建对player对象方法seek的直接引用。因为它是对特定实例方法的引用,所以当玩家被另一个实例替换时,它就会中断。播放器在内存中的位置会发生变化,其成员功能位置也会发生变化
seek : self.player.seek
这一次创建一个函数,seek保存对该函数的引用。这不会直接链接到播放器实例。调用seek时,将执行函数,并在每次调用时计算函数中的变量。因此,当函数执行self.player时,它将被查找,并将指向正确的/新的player对象。无论如何,它似乎是由我操作的,因为js在至少有一个指针之前不会破坏函数。我可以看看你的setCallback函数吗?
seek : function(time){ self.player.seek(time)}