如果我将一个函数作为参数传递,并且该函数是一个jQuery方法,那么稍后调用传递的函数是否仍然正确设置this
?我以为会这样,但稍后调用该函数有this = Window
。
示例代码:
var $input = $('input').first();
var evaluators = [];
evaluators.push($input.val);
_.forEach(evaluators, function(valueMethod) {
return valueMethod() //returns undefined always since this = window
}).
答案 0 :(得分:3)
尝试使用bind
:
bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。
evaluators.push($input.val.bind($input));
值得注意的是bind
是not supported on older browsers(例如IE8和FF3(或更早版本))。
答案 1 :(得分:0)
请参阅jQuery.proxy(),了解如何设置上下文或{{1}}功能。