我以为这是我可以轻松搜索的东西,但也许我没有问正确的问题…
如何在给定的javascript函数中设置“ this”所指的内容?
例如,与大多数jQuery函数一样,例如:
$(selector).each(function() { //$(this) gives me access to whatever selector we're on });
如何编写/调用自己的独立函数,并在调用时具有适当的“ this”引用?我使用jQuery,因此,如果有jQuery特定的方式可以做到,那将是理想的选择。
Javascript .call()和.apply()方法允许您设置函数的 上下文 。
.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()需要一个数组,则需要用逗号分隔的列表。
FOO
obj_b
BAR!!
myfunc.call(obj_a, 1, 2, 3); myfunc.apply(obj_a, [1, 2, 3]);
因此,您可以hook使用该apply()方法轻松编写函数。例如,我们要向jQuerys .css()方法添加功能。我们可以存储原始函数引用,使用自定义代码覆盖函数并调用存储的函数。
hook
apply()
.css()
var _css = $.fn.css; $.fn.css = function(){ alert('hooked!'); _css.apply(this, arguments); };
由于magicarguments对象是类似于对象的数组,因此我们可以将其传递给apply()。这样,我们保证所有参数都传递给原始函数。
arguments