Яваскрипти .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()
. Таким чином ми гарантуємо, що всі параметри передаються до вихідної функції.