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()
。这样,我们保证所有参数都传递给原始函数。