今天写一个类,在类中使用到了setTimeout函数。
1。 this.timerID = setTimeout("showtime()",1000);
提示:showtime is not defined
2。 this.timerID = setTimeout("this.showtime()",1000);
提示:this.showtime is not a function
3。 this.timerID = setTimeout("this.showtime",1000);
没有错误,但是不执行。
4. 正确的方法:
var self = this;
this.timerID = setTimeout(function(){self.showtime();},1000);
在方法1 - 3 中找不到showtime()函数。
方法1, showtime指的是一个单独的函数。
方法2, 3,this 指向的是window对象,而不是当前实例对象。
类如下:
代码 // JScript File function clock() { this .timerID = null ; this .timerRunning = false ; this .startHour = 0 ; this .startMinute = 0 ; this .startSecond = 0 ; this .showObj = null ; if ( typeof (clock._initialized) == " undefined " ) { clock.prototype.init = function (otimerID,timerRunning,startHour,startMinute,startSecond,showObj){ this .timerID = otimerID; this .timerRunning = timerRunning; this .startHour = startHour; this .startMinute = startMinute; this .startSecond = startSecond; this .showObj = showObj; }; clock.prototype.toggletimer = function (obj){ if ( this .timerRunning) { obj.value = " Start Timer " ; this .stopclock (); } else { obj.value = " Stop Timer " ; this .startclock (); } }; // stop the clock clock.prototype.stopclock = function (){ if ( this .timerRunning) clearTimeout( this .timerID); this .timerRunning = false ; }; // start the clock clock.prototype.startclock = function (){ var now = new Date(); this .startHour = now.getHours(); this .startMinute = now.getMinutes(); this .startSecond = now.getSeconds(); // Make sure the clock is stopped this .stopclock(); this .showtime(); }; // actually display the time clock.prototype.showtime = function (){ var i = 0 ; var strSec = "" ; var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); var seconds = now.getSeconds(); var timeValue = "" + ((hours > 12 ) ? hours - 12 :hours); timeValue += ((minutes < 10 ) ? " :0 " : " : " ) + minutes; timeValue += ((seconds < 10 ) ? " :0 " : " : " ) + seconds; timeValue += (hours >= 12 ) ? " P.M. " : " A.M. " ; var MinutesElapsing = Math.round(((hours - this .startHour) * 60 + (minutes - this .startMinute) + (seconds - this .startSecond) / 60)*10) / 10 ; this .showObj.value = MinutesElapsing; for (i = 0 ; i < seconds - this .startSecond; i ++ ) { strSec = strSec + " = " ; }; window.status = timeValue; var self = this ; this .timerID = setTimeout( function (){self.showtime();}, 1000 ); this .timerRunning = true ; }; } clock._initialized = true ; }
转载于:https://www.cnblogs.com/lfzwenzhu/archive/2010/06/01/1749121.html
相关资源:实例详解JavaScript中setTimeout函数的执行顺序