Sebenarnya, kode Anda akan berfungsi sebagaimana mestinya, hanya menyatakan panggilan balik Anda sebagai argumen dan Anda dapat memanggilnya langsung menggunakan nama argumen.
Dasar
function doSomething(callback) {
// ...
// Call the callback
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}
doSomething(foo);
Itu akan memanggil doSomething
, yang akan memanggil foo
, yang akan mengingatkan "barang-barang masuk di sini".
Perhatikan bahwa sangat penting untuk meneruskan referensi fungsi ( foo
), daripada memanggil fungsi dan meneruskan hasilnya ( foo()
). Dalam pertanyaan Anda, Anda melakukannya dengan benar, tetapi itu hanya layak ditunjukkan karena itu adalah kesalahan umum.
Lebih banyak barang canggih
Terkadang Anda ingin memanggil panggilan balik sehingga melihat nilai spesifik untuk this
. Anda dapat dengan mudah melakukannya dengan call
fungsi JavaScript :
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.call(this);
}
function foo() {
alert(this.name);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Joe" via `foo`
Anda juga bisa memberikan argumen:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback, salutation) {
// Call our callback, but using our own instance as the context
callback.call(this, salutation);
}
function foo(salutation) {
alert(salutation + " " + this.name);
}
var t = new Thing('Joe');
t.doSomething(foo, 'Hi'); // Alerts "Hi Joe" via `foo`
Terkadang berguna untuk meneruskan argumen yang ingin Anda beri panggilan balik sebagai array, bukan secara individual. Anda dapat menggunakannya apply
untuk melakukan itu:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
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); // Alerts "Hi Joe - 3 2 1" via `foo`
object.LoadData(success)
panggilan harus setelahfunction success
ditentukan. Jika tidak, Anda akan mendapatkan pesan kesalahan yang memberitahukan bahwa fungsi tersebut tidak didefinisikan.