2015-06-21 4 views
0

Обычно я делаю обратные вызовы, как это: The объект, который вызывает функцию обратного вызова имеет эти методы:Вызов анонимной функции на объекте

this.set_success_callback = function(obj, func){ 
    this.success_callback_obj = obj; 
    this.success_callback_func = func; 
} 

this.make_success_callback = function(msg){ 
    this.success_callback_obj[this.success_callback_func](msg); 
} 

Затем, когда я настроить Object Я assgin обратного вызова, как это:

var obj = new ... 
    obj.set_success_callback(this, "sayHello"); 

Это работает должным образом. Но когда я хочу, чтобы определить функцию обратного вызова, как это:

obj.set_success_callback(this, this.sayHello); 

И изменить функцию make_success_callback на:

this.success_callback_ob.call(this.success_callback_func, msg) 

Я получаю эту ошибку:

Object [object Object] has no method 'call' 

Что мне нужно изменить, чтобы он работал? Как я могу вызвать функцию sayHello? Спасибо

+0

Так много неизвестных в вопросе. Можете ли вы предоставить минимальную воспроизводимую программу? – thefourtheye

ответ

2

Вы просто смешали объект с функцией. Оно должно быть:

this.success_callback_func.call(this.success_callback_ob, msg) 

Function имеет .call() method, который принимает объект контекста в качестве первого аргумента. Object не имеет .call() метод.

+0

Спасибо, Хотя я читал документы, я не получил его правильно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call –

Смежные вопросы