Apakah mungkin untuk melewatkan fungsi javascript dengan parameter sebagai parameter?
Contoh:
$(edit_link).click( changeViewMode( myvar ) );
Apakah mungkin untuk melewatkan fungsi javascript dengan parameter sebagai parameter?
Contoh:
$(edit_link).click( changeViewMode( myvar ) );
Jawaban:
Gunakan "penutupan":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Ini menciptakan pembungkus fungsi sementara anonim yang tahu tentang parameter dan meneruskannya ke implementasi panggilan balik yang sebenarnya.
this.myFunction = this.myFunction.bind(this)Anda constructor. Tetapi, seperti yang Anda katakan, ketika Anda harus memberikan konteks berbeda untuk masing-masing, seperti semua baris yang Anda klik untuk membuka halaman detail baris itu, itu tidak dapat dihindari.
Gunakan Function.prototype.bind(). Mengutip MDN:
The
bind()Metode menciptakan fungsi baru yang, saat dipanggil, memiliki nyathisset kata kunci untuk nilai disediakan, dengan urutan tertentu argumen sebelumnya yang disediakan ketika fungsi baru ini disebut.
Ini didukung oleh semua browser utama, termasuk IE9 +.
Kode Anda akan terlihat seperti ini:
$(edit_link).click(changeViewMode.bind(null, myvar));
Catatan: Saya menganggap Anda berada dalam konteks global, yaitu thisvariabelnya adalah window; jika tidak gunakan thissebagai ganti null.
$.ajax(url).done(handler.bind(this, var1, var2));
Ya seperti ini:
$(edit_link).click(function() { changeViewMode(myvar) });
Atau jika Anda menggunakan es6, Anda harus dapat menggunakan fungsi panah
$(edit_link).click(() => changeViewMode(myvar));
Kamu bisa melakukan ini
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
lalu
function activate(callback){
callback && callback();
}
activate(callback);
Atau jika panggilan balik Anda mengandung logika yang lebih fleksibel, Anda dapat melewati objek.
Ini adalah contoh mengikuti pendekatan Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
Dalam contoh ini "nilai parameter" dilewatkan dari function1 ke function3 melalui function2 menggunakan pembungkus fungsi.