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()
です。これにより、すべてのパラメーターが元の関数に渡されることが保証されます。