在setTimeout中使用对象文字函数

时间:2011-06-16 11:59:41

标签: javascript object settimeout literals

我有一些类似的代码:

var options = {
    timerInterval: 800,
    timer: null
};

var functions = {
    someFunction: function() {

    }
};

options.timer = setTimeout('functions.someFunction()', options.timerInterval);

但这不会触发,因为它无法找到函数对象。

怎么办? :d

2 个答案:

答案 0 :(得分:4)

试试这个:

options.timer = setTimeout(function () {
  functions.someFunction()
}, options.timerInterval)

不建议将函数参数写为setTimeout b / c中的字符串,它必须进行一些转换,这会增加脚本的开销,并且可以通过使用匿名函数来调用函数来避免。

答案 1 :(得分:0)

你可以这样做:

options.timer = setTimeout(functions.someFunction, options.timerInterval);

但是...更强大的方法就是这样:

options.timer = setTimeout(function () {
    functions.someFunction();
}, options.timerInterval);

第二个版本更好,因为在JavaScript中,特殊变量this是动态范围的,这意味着它将从它所评估的范围中获取值,而不是它定义的范围。谷歌搜索“了解这个javascript”以了解更多信息。

在相关说明中,ES5引入Function.prototype.bind来处理this问题。