今天写一个类,在类中使用到了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;
}
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;
}