我认为这将是我可以轻松谷歌的东西,但也许我没有问正确的问题......
如何在给定的 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!!
.call()``.apply()
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); };
由于魔法arguments对象是一个类似数组的对象,我们可以将它传递给apply(). 这样我们保证所有参数都传递给原始函数。
arguments