Parametreli bir javascript işlevini parametre olarak geçirmek mümkün müdür?
Misal:
$(edit_link).click( changeViewMode( myvar ) );
Parametreli bir javascript işlevini parametre olarak geçirmek mümkün müdür?
Misal:
$(edit_link).click( changeViewMode( myvar ) );
Yanıtlar:
Bir "kapanış" kullanın:
$(edit_link).click(function(){ return changeViewMode(myvar); });
Bu, parametre hakkında bilgi sahibi olan ve onu gerçek geri arama uygulamasına ileten anonim bir geçici işlev sarmalayıcısı oluşturur.
this.myFunction = this.myFunction.bind(this)kendi constructoryönteminizde kullanmanız gerektiğini söyledi . Ancak, söylediğiniz gibi, her biri için farklı bağlamlar iletmeniz gerektiğinde, o satırın ayrıntı sayfasını açmak için tıkladığınız tüm farklı satırlar gibi, bu önlenemez.
Kullanın Function.prototype.bind(). MDN'den alıntı yapmak:
bind()Yöntem çağrıldığında, onun sahip yeni bir işlev oluştururthisyeni işlev çağrıldığında bir mesafede önceki argümanlar, belirli bir sekans ile, verilen değere kelime seti.
IE9 + dahil tüm büyük tarayıcılar tarafından desteklenir.
Kodunuz şöyle görünmelidir:
$(edit_link).click(changeViewMode.bind(null, myvar));
Yan not: Küresel bağlamda olduğunuzu varsayıyorum, yani thisdeğişken window; aksi takdirde thisyerine kullanın null.
$.ajax(url).done(handler.bind(this, var1, var2));
Evet bunu beğendim:
$(edit_link).click(function() { changeViewMode(myvar) });
Veya es6 kullanıyorsanız bir ok işlevini kullanabilmelisiniz
$(edit_link).click(() => changeViewMode(myvar));
Bunu yapabilirsiniz
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
ve sonra
function activate(callback){
callback && callback();
}
activate(callback);
Ya da geri aramanız daha esnek bir mantık içeriyorsa, nesneyi iletebilirsiniz.
Bu, Ferdinand Beyer'in yaklaşımını takip eden bir örnektir:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
Bu örnekte "parametre değeri", bir işlev sarma kullanılarak işlev1'den işlev3'e işlev2'ye aktarılır.