Яваскрипти .call()та .apply()методи дозволяють встановити контекст функції.
var myfunc = function(){
alert(this.name);
};
var obj_a = {
name: "FOO"
};
var obj_b = {
name: "BAR!!"
};
Тепер ви можете зателефонувати:
myfunc.call(obj_a);
Що б насторожило FOO. Навпаки, проїжджаючи obj_bб насторожили BAR!!. Різниця між .call()і .apply()полягає в тому, що він .call()містить розділений комою список, якщо ви передаєте аргументи своїй функції та .apply()потребує масиву.
myfunc.call(obj_a, 1, 2, 3);
myfunc.apply(obj_a, [1, 2, 3]);
Тому ви можете легко записати функцію hook, використовуючи apply()метод. Наприклад, ми хочемо додати функцію до .css()методу jQuerys . Ми можемо зберігати оригінальну посилання на функцію, перезаписувати функцію спеціальним кодом та викликати збережену функцію.
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
Оскільки магічний argumentsоб’єкт є масивом, подібним до об'єкта, ми можемо просто передати його apply(). Таким чином ми гарантуємо, що всі параметри передаються до вихідної функції.