小编典典

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

all

我认为这将是我可以轻松谷歌的东西,但也许我没有问正确的问题......

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

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

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

如何编写/调用我自己的独立函数,这些函数在调用时具有适当的“this”引用?我使用 jQuery,所以如果有特定于 jQuery 的方法,那将是理想的。


阅读 122

收藏
2022-06-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);
};

由于魔法arguments对象是一个类似数组的对象,我们可以将它传递给apply(). 这样我们保证所有参数都传递给原始函数。

2022-06-01