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()
Как я могу сделать так, чтобы метод обратного вызова this.b указывал на член this.a независимо от того, заменяется ли this.a новым экземпляром? Другими словами, оно разрешается динамически?
Я знаю, как это сделать на других языках, но по какой-то причине в Javascript я не могу понять это.
[править]
Проблема, похоже, в чем-то другом. Функции обратного вызова уже были объявлены в прототипе объекта. Но теперь я выделил проблему, я думаю.
Ниже вы видите кусок кода из моего объекта. Он содержит 2 объекта-члена. Один игрок и одна форма волны. Плеер - это нечто, что создается динамически после появления нового URL. Я хочу, чтобы осциллограмма сделала обратный вызов с именем «seek» члену this.player даже после изменения объекта.
Это не похоже на работу:
// 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.
...
но он работает, как только я установил опцию поиска, используя анонимную функцию:
seek : function(time){ self.player.seek(time)},
Я хотел бы понять, почему два подхода принципиально различны.