作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我认为这很容易用谷歌搜索,但也许我没有问正确的问题......
如何在给定的 javascript 函数中设置“this”所指的内容?
例如,与大多数 jQuery 函数一样,例如:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
如何编写/调用我自己的独立函数,这些函数在调用时具有适当的“this”引用?我使用 jQuery,所以如果有特定于 jQuery 的方法,那将是理想的。
最佳答案
Javascript 的 .call()
和 .apply()
方法允许您为函数设置 context。
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]);
因此,您可以使用 apply()
方法轻松编写函数 hook
。例如,我们想为 jQuerys .css()
方法添加一个特性。我们可以存储原始函数引用,用自定义代码覆盖函数并调用存储的函数。
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
由于魔术 arguments
对象是一个类似数组的对象,我们可以将它传递给 apply()
。这样我们保证所有参数都传递给原始函数。
关于javascript - 如何将 this 上下文传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630054/
我是一名优秀的程序员,十分优秀!