的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]);
因此,可以很容易地通过使用apply()
方法写一个函数hook
。例如,我们想为jQuerys .css()
方法添加一个功能。我们可以存储原始函数引用,用自定义代码覆盖函数并调用存储的函数。
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
由于魔arguments
对象是状物体的阵列,我们只要把它传递给apply()
。我们保证这种方式,所有参数都传递给原始函数。
可能重复:http://stackoverflow.com/questions/520019/controlling-the-value-of-this-in-a-jquery-event/520417#520417 – user123444555621 2010-09-02 18:39:14
我知道这是个老问题,但对于在此处着陆的其他人来说,请参阅jQuery'$ .proxy' – RyBolt 2016-07-15 15:34:33