java实现settimeout_JS中的window.setTimeout()详解

setTimeout (表达式,延时时间)

setInterval(表达式,交互时间)

其中延时时间/交互时间是以豪秒为单位的(1000ms=1s)

setTimeout 在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次

setInterval在执行时,它从载入后,每隔指定的时间就执行一次表达式

1,基本用法:

var

i=0;

setTimeout("i+=1;alert(i)",1000); 执行一个函数:

var i=0;

setTimeout(function(){i+=1;alert(i);},1000); //注意上面的两种方法的不同

下面再来一个执行函数:

var i=0;

function test(){

i+=1;

alert(i);

}

setTimeout("test()",1000);

也可以这样:

setTimeout(test,1000);

总结: setTimeout的原型是这样的:

iTimerID = window.setTimeout(vCode, iMilliSeconds [,

sLanguage]) setTimeout有两种形式

setTimeout(code,interval)

setTimeout(func,interval,args)

其中code是一个字符串 func是一个函数.

注意"函数"的意义,是一个表达式,而不是一个语句.

比如你想周期性执行一个函数

function a(){

//...

}可写为

setTimeout("a()",1000)或

setTimeout(a,1000)

这里注意第二种形式中,是a,不要写成a(),

展开来说,不管你这里写的是什么,如果是一个变量,一定是一个指向某函数的变量;如果是个函数,那它的返回值就 要是个函数

2,用setTimeout实现setInterval的功能

思路很简单,就是在一个函数中调用不停执行自己,有点像递归

var i=0;

function xilou(){

i+=1;

if(i>10){alert(i);return;}

setTimeout("xilou()",1000);

//用这个也可以

//setTimeout(xilou,1000);

} ((插曲:介绍一下return:

描述

从当前函数退出,并从那个函数返回一个值。

语法

return [expression];

expression 参数是要从函数返回的值。如果省略,则该函数不返回值。

----------------------------------------------------------------------------------------------

setInterval和setTimeout是相似的但有些不同。最大的区别是setInterval创

建一个动作连续不断的调用执行函数——象打击鼓点一样。setTimeout,如同上面

所说,将执行一次,然后就停止。一个setTimeout函数可以再次调用自己来模拟事

件的再次发生:

setInterval(表达式,交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式 用setInterval实现的自动变化显示随机数的效果:  

     

)) 3,在类中使用setTimeout

来分析一下:

function xilou(){

this.name="xilou";

this.sex="男";

this.num=0;

}

xilou.prototype.count=function(){

this.num+=1;

alert(this.num);

if(this.num>10){return;}

//下面用四种方法测试,一个一个轮流测试。

setTimeout("this.count()",1000);//A:当下面的x.count()调用时会发生错误:对象不支持此属性或方法。

setTimeout("count()",1000);//B:错误显示:缺少对象

setTimeout(count,1000);//C:错误显示:'count'未定义

//下面是第四种 var self=this;

setTimeout(function(){self.count();},1000);//D:正确 }

var x=new xilou();

x.count(); 错误分析:

A:中的this其实指是window对象,并不是指当前实例对象 B:和C:中的count()和count其实指的是单独的一个名为count()的函数,但也可以是window.count(),因为window.count()可以省略为count() D:将变量self指向当前实例对象,这样js解析引擎就不会混肴this指的是谁了。

话说回来,虽然我们知道setTimeout("this.count()",1000)中的this指的是window对象,但还是不明白为什么会是

window对象

那我们可以想象一下这个setTimeout是怎样被定义的:

setTimeout是window的一个方法,全称是这样的:window.setTimeout()

那应该是这样被定义的:

window.setTimeout=function(vCode, iMilliSeconds [,

sLanguage]){

//.....代码

return timer//返回一个标记符

}

所以当向setTimeout()传入this的时候,当然指的是它所属的当前对象window了。

---------------------------------------------------------------------------------------------------------------------------------

关于prototype:

prototype(原型)同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。(有点模糊..)

在JavaScript中,prototype对象是实现面向对象的一个重要机制。

每个函数就是一个对象(Function),函数对象都有一个子对象

prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。

在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。

1、该对象被类所引用,只有函数对象才可引用;

2、在new实例化后,其成员被实例化,实例对象方可调用。

例子1:给String类封装一个“日期验证”的新的方法:

String.prototype.isDate

= function(){var regex = new

RegExp("^[\d]([-|/])[\d]{1,2}([-|/])[\d]{1,2}$");console.log(this);return

regex.exec(this);}var

strValue = "12512412";alert(strValue.isDate());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值