我有一些类似的代码:
var options = {
timerInterval: 800,
timer: null
};
var functions = {
someFunction: function() {
}
};
options.timer = setTimeout('functions.someFunction()', options.timerInterval);
但这不会触发,因为它无法找到函数对象。
怎么办? :d
答案 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
问题。