2

我需要在特定上下文中执行以下功能。

setTimeout(function () {
    myFunction();
}, 1000 * 60);


var changeDateFormat = function () {
    console.log(this); // this should be $('.myClass') 
                       // but I need to set it from setTimeout
                       // any hints
};

PS:
我正在使用 Underscore.js 和 jQuery。

4

5 回答 5

3

您可以使用jQuery.proxy

setTimeout($.proxy(myFunction, $(".myClass")), 1000 * 60);

这是一个例子:http: //jsfiddle.net/UwUQD/1/

正如詹姆斯所说,您也可以apply在内部使用 jQuery:

proxy = function() {
    return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
};

第一个apply参数是执行上下文(您可以使用 访问this),第二个参数是您要传递给 myFunction 的其他参数。该call函数是相同的,但接受的附加参数略有不同。


或者在 Underscore.js 中使用bind

setTimeout(_.bind(myFunction, $(".myClass")), 100);

http://jsfiddle.net/UwUQD/3/

于 2012-11-19T15:28:21.093 回答
0

您可以使用 JavaScript 调用或应用函数来设置函数的范围。也许查看本教程以了解它们如何工作的详细信息。

通过设置范围,您可以将“this”设置为您想要的任何内容。

于 2012-11-19T15:30:53.097 回答
0

You could use bind to bind the callback to the desired context.
The downside to this being that some browsers might not support this. But sticking to the basic principles of JS, a closure will serve you just perfectly, too:

var callBack = (function(that)
{//<-- use "that" instead of "this"
    return function()
    {
        console.log(that);
    };
}($('.myClass')));//<-- pass value for that here
setTimeout(callBack,60000);
于 2012-11-19T16:00:10.540 回答
0

也许这样的事情会有所帮助:

var changeDateFormat = function () {
    console.log(this); // this should be $('.myClass') 
                       // but I need to set it from setTimeout
                       // any hints
};

function callWithContext() {
   changeDateFormat.call($(".class"));
}

setTimeout(callWithContext, 1000 * 60);
于 2012-11-19T15:34:34.653 回答
0

调用call你想要调用的函数,将你想要的this对象作为第一个参数传递:

setTimeout(function () {
    myFunction.call($('.myClass'));
}, 1000 * 60);
于 2012-11-19T15:35:55.503 回答