2015-06-21 103 views
0

通常我做这样的回调:该对象调用回调有这样的方法:调用匿名函数

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); 
} 

然后当我安装了对象我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 –