我的Java路上那些事兒

          快樂成長(zhǎng)
          posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          setTimeout(表達(dá)式,延遲時(shí)間); 單位:ms(毫秒);1s=1000ms; 

            setInterval(表達(dá)式,交互時(shí)間);  單位:ms(毫秒);1s=1000ms; 

            window.setTimeout()

             在執(zhí)行時(shí),它從載入后延遲指定的時(shí)間去執(zhí)行一個(gè)表達(dá)式或者是函數(shù);僅執(zhí)行一次;和window.clearTimeout一起使用.

            window.setInterval()

             在執(zhí)行時(shí),它從載入頁(yè)面后每隔指定的時(shí)間執(zhí)行一個(gè)表達(dá)式或者是函數(shù);(功能類似于遞歸函數(shù));和window.clearInterval一起使用.

            1,基本用法:

             執(zhí)行一段代碼:  var i=0;

             setTimeout("i+=1;alert(i)",1000);

             執(zhí)行一個(gè)函數(shù):

             var i=0;

             setTimeout(function(){i+=1;alert(i);},1000);

             //注意比較上面的兩種方法的不同。

             下面再來一個(gè)執(zhí)行函數(shù)的:

            var i=0;
          function test(){
          i+=1;
          alert(i);
          }
          setTimeout("test()",1000);
          也可以這樣:
          setTimeout(test,1000);

             總結(jié):

             setTimeout的原型是這樣的:

             iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])

            setTimeout有兩種形式

            setTimeout(code,interval)

            setTimeout(func,interval,args)

            其中code是一個(gè)字符串

            func是一個(gè)函數(shù).

            注意"函數(shù)"的意義,是一個(gè)表達(dá)式,而不是一個(gè)語(yǔ)句.

            比如你想周期性執(zhí)行一個(gè)函數(shù)

           function a(){
          //...
          }

            可寫為

            setInterval("a()",1000)

            或

            setInterval(a,1000)

            這里注意第二種形式中,是a,不要寫成a(),切記!!!

            展開來說,不管你這里寫的是什么,如果是一個(gè)變量,一定是一個(gè)指向某函數(shù)的變量;如果是個(gè)函數(shù),那它的返回值就 要是個(gè)函數(shù)

            2,用setTimeout實(shí)現(xiàn)setInterval的功能

            思路很簡(jiǎn)單,就是在一個(gè)函數(shù)中調(diào)用不停執(zhí)行自己,有點(diǎn)像遞歸

            var i=0;
          function xilou(){
          i+=1;
          if(i>10){alert(i);return;}
          setTimeout("xilou()",1000);
          //用這個(gè)也可以
          //setTimeout(xilou,1000);
          }

            3,在類中使用setTimeout

            終于到正題了,其實(shí)在類中使用大家遇到的問題都是關(guān)于this的,只要解決了這個(gè)this的問題就萬事無憂了。

            呵呵。讓我們來分析一下:

            function xilou(){
          //by 西樓冷月 www.chinacms.org
          this.name="xilou";
          this.sex="男";
          this.num=0;
          }
          xilou.prototype.count=function(){
          this.num+=1;
          alert(this.num);
          if(this.num>10){return;}
          //下面用四種方法測(cè)試,一個(gè)一個(gè)輪流測(cè)試。
          setTimeout("this.count()",1000);//A:當(dāng)下面的x.count()調(diào)用時(shí)會(huì)發(fā)生錯(cuò)誤:對(duì)象不支持此屬性或方法。
          setTimeout("count()",1000);//B:錯(cuò)誤顯示:缺少對(duì)象
          setTimeout(count,1000);//C:錯(cuò)誤顯示:'count'未定義
          //下面是第四種 by 西樓冷月 www.chinacms.org
          var self=this;
          setTimeout(function(){self.count();},1000);//D:正確

          }

          var x=new xilou();
          x.count();

            錯(cuò)誤分析:

            A:中的this其實(shí)指是window對(duì)象,并不是指當(dāng)前實(shí)例對(duì)象

            B:和C:中的count()和count其實(shí)指的是單獨(dú)的一個(gè)名為count()的函數(shù),但也可以是window.count(),因?yàn)閣indow.count()可以省略為count()

            D:將變量self指向當(dāng)前實(shí)例對(duì)象,這樣js解析引擎就不會(huì)混肴this指的是誰(shuí)了。

            話說回來,雖然我們知道setTimeout("this.count()",1000)中的this指的是window對(duì)象,但還是不明白為什么會(huì)是

            window對(duì)象^_^(有點(diǎn)頭暈...)

            那我們可以想象一下這個(gè)setTimeout是怎樣被定義的:

            setTimeout是window的一個(gè)方法,全稱是這樣的:window.setTimeout()

            那應(yīng)該是這樣被定義的:

            window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){
          //.....代碼
          return timer//返回一個(gè)標(biāo)記符
          }

            所以當(dāng)向setTimeout()傳入this的時(shí)候,當(dāng)然指的是它所屬的當(dāng)前對(duì)象window了


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 盐池县| 江源县| 金乡县| 崇仁县| 增城市| 海盐县| 三河市| 乐昌市| 鄂温| 胶南市| 布尔津县| 阳谷县| 巴楚县| 文登市| 宜宾县| 阿尔山市| 平江县| 马尔康县| 乌兰察布市| 绥中县| 舞钢市| 安福县| 玉林市| 于田县| 威信县| 汉川市| 保靖县| 荥经县| 增城市| 芜湖市| 镇原县| 申扎县| 宝丰县| 日喀则市| 彭州市| 霍州市| 佛坪县| 尚志市| 华阴市| 栾城县| 云和县|