小编典典

如何将此上下文传递给函数?

javascript

我以为这是我可以轻松搜索的东西,但也许我没有问正确的问题…

如何在给定的javascript函数中设置“ this”所指的内容?

例如,与大多数jQuery函数一样,例如:

$(selector).each(function() {
   //$(this) gives me access to whatever selector we're on
});

如何编写/调用自己的独立函数,并在调用时具有适当的“ this”引用?我使用jQuery,因此,如果有jQuery特定的方式可以做到,那将是理想的选择。


阅读 270

收藏
2020-05-01

共1个答案

小编典典

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);
};

由于magicarguments对象是类似于对象的数组,因此我们可以将其传递给apply()。这样,我们保证所有参数都传递给原始函数。

2020-05-01