实际上,你的代码基本上可以直接使用,只需将回调函数声明为一个参数,并使用该参数名称直接调用即可。
基础知识
function doSomething(callback) {
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
alert(a + " " + b + " " + c);
}
doSomething(foo);
这会调用doSomething
函数,然后调用foo
函数,最终弹出"stuff goes here"。
需要注意的是,传递函数时非常重要要传递函数引用(foo
),而不是调用函数并传递其结果(foo()
)。在您的问题中,您做得很好,但值得指出的是,这是一个常见错误。
更高级的内容
有时候您想要调用回调函数以便它看到this
的特定值。您可以使用JavaScript的call
函数轻松实现:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
callback.call(this);
}
function foo() {
alert(this.name);
}
var t = new Thing('Joe');
t.doSomething(foo);
您还可以传递参数:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback, salutation) {
callback.call(this, salutation);
}
function foo(salutation) {
alert(salutation + " " + this.name);
}
var t = new Thing('Joe');
t.doSomething(foo, 'Hi');
有时候,将你想要传递给回调函数的参数作为数组一起传递,而不是单独传递,会更加有用。你可以使用
apply
来实现这个功能:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
callback.apply(this, ['Hi', 3, 2, 1]);
}
function foo(salutation, three, two, one) {
alert(salutation + " " + this.name + " - " + three + " " + two + " " + one);
}
var t = new Thing('Joe');
t.doSomething(foo);
function success
后才能调用object.LoadData(success)
。否则,你会收到一个错误提示,告诉你该函数未定义。 - J. Bruni