Javascripts .call()
ve .apply()
yöntemler bir işlevin bağlamını ayarlamanıza olanak tanır .
var myfunc = function(){
alert(this.name);
};
var obj_a = {
name: "FOO"
};
var obj_b = {
name: "BAR!!"
};
Şimdi arayabilirsiniz:
myfunc.call(obj_a);
Hangi uyarır FOO
. Diğer yoldan, geçiş obj_b
uyanık olurdu BAR!!
. Arasındaki fark .call()
ve .apply()
olmasıdır .call()
size işleve argümanlar geçiriyorsanız eğer virgülle ayrılmış listesi alır ve .apply()
bir dizi ihtiyacı var.
myfunc.call(obj_a, 1, 2, 3);
myfunc.apply(obj_a, [1, 2, 3]);
Bu nedenle, yöntemi hook
kullanarak kolayca bir işlev yazabilirsiniz apply()
. Örneğin, jQuerys .css()
yöntemine bir özellik eklemek istiyoruz . Orijinal işlev referansını saklayabilir, özel kod ile işlevin üzerine yazabilir ve saklanan işlevi çağırabiliriz.
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
Sihirli arguments
nesne bir nesne gibi bir dizi olduğundan, onu aktarabiliriz apply()
. Bu şekilde, tüm parametrelerin orijinal fonksiyona aktarıldığını garanti ederiz.