JavaScript .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()メソッドを使用すると、関数を簡単に作成できます。たとえば、jQuerys .css()メソッドに機能を追加したいとします。元の関数参照を保存し、カスタムコードで関数を上書きして、保存された関数を呼び出すことができます。
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
魔法のargumentsオブジェクトはオブジェクトのような配列なので、に渡すだけapply()です。これにより、すべてのパラメーターが元の関数に渡されることが保証されます。