关闭

setTimeout()在js类中的使用方法

942人阅读 评论(0) 收藏 举报

setTimeout (表达式,延时时间)
setTimeout(表达式,交互时间)
延时时间/交互时间是以豪秒为单位的(1000ms=1s)

setTimeout  在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次
setTimeout 在执行时,它从载入后,每隔指定的时间就执行一次表达式

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);
    }
   
    3,在类中使用setTimeout
    终于到正题了,其实在类中使用大家遇到的问题都是关于this的,只要解决了这个this的问题就万事无忧了。
呵呵。让我们来分析一下:
   
    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了。 

0
0
查看评论

android webview setTimeout不执行

在Android开发中,难免需要载入H5页面处理一些扩展性需求,这个时候就需要使用webview了。 有时候js里面会用到 setTimeout 函数用来进行定时操作。 今天我就遇到使用了setTimeout,而没有任何反应的情况。 尝试各种方式而不得的情况下,我使用类似android代码里...
  • bachelor49
  • bachelor49
  • 2017-10-29 15:25
  • 359

js关于for循环里的setTimeout

for(var i=0;i<3;i++) { setTimeout(function () { console.log(i),100*i }) } 本以为上述代码会输出0,1,2...
  • ZYGG5521
  • ZYGG5521
  • 2015-08-10 13:52
  • 3103

js中setTimeout方法重写,实现对象参数传递

带参数方法使用setTimeout:setTimeout("函数名("+参数+")",毫秒数),这里的参数只能是字符串形式的,而不能传递一个对象,以下重写setTimeout方法   var __sto = setTimeout;   window.set...
  • xiaoyaoyunzi
  • xiaoyaoyunzi
  • 2012-12-06 18:20
  • 1773

js中关于setTimeOut()循环的问题

function stop() { clearTimeout(t); } function checkTime(i) { if (i i = "0" + i; } return i; } function fun2(week...
  • u013850857
  • u013850857
  • 2014-07-26 02:08
  • 1168

js的settimeout方法在安卓不起作用,在某些项目里死活运行不正常的问题。

在项目里引入一个H5的SDK,调用时候死活不正常,无法调用起里面的js的settimeout方法。把代码写到令一个工程,却一切正常。 进行了长久的各种方法,目前找到一个办法,仅供参考。(提醒,安卓工程引入H5,各种兼容性问题都是巨坑,慎重选择。) 为了直接在小米手机上安装项目,是这样设置的: ...
  • zhan10001
  • zhan10001
  • 2017-12-02 09:05
  • 349

js中setTimeOut()的返回值

setTimeout()方法的返回值是一个唯一的数值,这个数值有什么用呢? 如果你想要终止setTimeout()方法的执行,那就必须使用 clearTimeout()方法来终止,而使用这个方法的时候,系统必须知道你到底要终止的是哪一个setTimeout()方法(因为你可能同时调用了好几个 set...
  • jiezheee
  • jiezheee
  • 2015-03-19 09:40
  • 390

理解javascript异步机制(setTimeout )

最近在学nodejs ,对于异步的概念早就理解了,但是,却有一个问题一直不解。 问题描述: javascript是一个单线程的语言,那他是如何实现异步的呢? 看了很多资料,终于找到了答案: 所有的关键是:setTimeout、setInterval。 对于异步不了解...
  • zhouyongwinner
  • zhouyongwinner
  • 2014-12-26 17:19
  • 1984

js的setTimeout异步机制

(1) setTimeout的异步以及js是单线程的面试题 var t=true; window.setTimeout(function(){ t=false; },1000); while(t){ } alert('end'); 这个怎么解...
  • tony19890820
  • tony19890820
  • 2014-06-15 13:37
  • 1076

js setTimeout 在类中,绑定this的方法

setTimeout 最常用的用法是: setTimeout(functionName,1000); //functionName 为一个函数的名字 在一个类中,调用setTimeout,会出现问题,this指向了window var firstName = "zhe...
  • xiongzhengxiang
  • xiongzhengxiang
  • 2012-05-24 17:06
  • 3733

在js的对象中使用setTimeout和setInterval调用对象自身方法

在js的对象中使用setTimeout和setInterval调用对象自身方法function myobj(){this.id=myobj.names.length;myobj.names[this.id]=this;}myobj.names=new Array();myobj.prototype....
  • zhaoyh82
  • zhaoyh82
  • 2009-08-03 16:25
  • 6494
    个人资料
    • 访问:11996176次
    • 积分:66725
    • 等级:
    • 排名:第39名
    • 原创:675篇
    • 转载:2295篇
    • 译文:0篇
    • 评论:558条
    文章分类
    文章存档
    最新评论
    计算流量