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