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_buyanı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 hookkullanarak 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 argumentsnesne bir nesne gibi bir dizi olduğundan, onu aktarabiliriz apply(). Bu şekilde, tüm parametrelerin orijinal fonksiyona aktarıldığını garanti ederiz.