传递方法以供以后评估

时间:2015-09-29 18:26:21

标签: javascript jquery

如果我将一个函数作为参数传递,并且该函数是一个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
}).

2 个答案:

答案 0 :(得分:3)

尝试使用bind

  

bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。

evaluators.push($input.val.bind($input)); 

值得注意的是bindnot supported on older browsers(例如IE8和FF3(或更早版本))。

答案 1 :(得分:0)

请参阅jQuery.proxy(),了解如何设置上下文或{{1}}功能。