Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对动态对象的回调_Javascript_Dynamic_Callback - Fatal编程技术网

Javascript 对动态对象的回调

Javascript 对动态对象的回调,javascript,dynamic,callback,Javascript,Dynamic,Callback,如何使this.b的回调方法指向this.a的成员,而不管this.a是否替换为新实例?换句话说,它是动态解决的吗 我知道如何在其他语言中做到这一点,但出于某种原因,在Javascript中,我似乎无法理解这一点 [编辑] 问题似乎有所不同。回调函数已经在对象的原型中声明。但是现在我已经把我认为的问题隔离了 下面您可以看到我的对象中的一段代码。它包含2个成员对象。一个播放器和一个波形。播放器是在新url可用后动态实例化的东西。我希望波形向this.player的成员发出一个名为“seek”的回调

如何使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)}