2013年03月01日   JavaScript   3,586 次浏览
下面是最初使用setInterval定时器的代码(简化后的):
var Timer = function(i){ this.hasTimes = i; this.timer = setInterval(this.run, 998); } Timer.prototype.run = function() { alert(this.hasTimes); } new Timer(100); |
这时就会提示hasTimes未定义,个人认为是作用域的原因引起的,setInterval作为一个单独的函数来调用run方法,而不是作为Timer类方法来调用的,所以我们就要以类的形式来调用,代码如下:
delegate = function(func, scope) { scope = scope; if(arguments.length > 2) { var args = Array.prototype.slice.call(arguments, 2); return function() { return func.apply(scope, args); } } else { return function() { return func.call(scope); } } } var Timer = function(i){ this.hasTimes = i; this.timer = setInterval(delegate(this.run, this), 1000); } Timer.prototype.run = function() { alert(this.hasTimes); } new Timer(100); |
这样在run方法中就可以正常获取变量hasTimes的值了。
>>> Hello World <<<
这篇内容是否帮助到你了呢?
如果你有任何疑问或有建议留给其他朋友,都可以给我留言。