如何在JS中的setTimeout中调用this.function?

时间:2011-05-03 20:37:14

标签: javascript

我有以下JS:

function TrackTime() {

    this.CountBack = function(secs) {
        setTimeout(function(){this.CountBack(secs)}, SetTimeOutPeriod);
    }

}

我试过这个关闭(见上文)以及其他十几种方式。我似乎无法在任何浏览器中使用它。不在“类”函数中调用时,setTimeout函数工作正常。有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:9)

这是因为执行函数时“this”范围发生了变化。

试试这个 - 这个技巧..

    function TrackTime() {  
        this.CountBack = function(secs) {         
            var that = this;

            setTimeout(function(){that.CountBack(secs)}, SetTimeOutPeriod);     
        };
    } 

答案 1 :(得分:0)

你可以试试这个:

var that = this;
this.CountBack = function (secs) {
    setTimeout(function () {that.CountBack(secs)}, SetTimeOutPeriod);
}

答案 2 :(得分:0)

你不能在这里使用闭包的原因是因为setTimeout运行窗口对象,所以'this'总是'window'。您将在此处使用部分函数应用程序来设置函数的上下文(以及可选的某些预定义参数!),同时将其保留为引用,因此它可以用作事件处理程序!整洁啊?见下文。

// This will call a function using a reference with predefined arguments.
function partial(func, context /*, 0..n args */) {
  var args = Array.prototype.slice.call(arguments, 2);
  return function() {
    var allArguments = args.concat(Array.prototype.slice.call(arguments));
    return func.apply(context ? context : this, allArguments);
  };
}