国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

在Javascript類中使用setTimeout_javascript技巧

來源:懂視網 責編:小采 時間:2020-11-27 20:38:36
文檔

在Javascript類中使用setTimeout_javascript技巧

在Javascript類中使用setTimeout_javascript技巧:最近遇到了一道 Javascript 考題,內容如下: 嘗試實現注釋部分的 Javascript 代碼,可在其他任何地方添加更多 代碼(如不能實現,說明一下不能實現的原因): var Obj = function(msg){ this.msg = msg; this.shout = funct
推薦度:
導讀在Javascript類中使用setTimeout_javascript技巧:最近遇到了一道 Javascript 考題,內容如下: 嘗試實現注釋部分的 Javascript 代碼,可在其他任何地方添加更多 代碼(如不能實現,說明一下不能實現的原因): var Obj = function(msg){ this.msg = msg; this.shout = funct

最近遇到了一道 Javascript 考題,內容如下:

嘗試實現注釋部分的 Javascript 代碼,可在其他任何地方添加更多
代碼(如不能實現,說明一下不能實現的原因):

var Obj = function(msg){
this.msg = msg;
this.shout = function(){
alert(this.msg);
}

this.waitAndShout = function(){
// 隔五秒鐘后執行上面的 shout 方法
}
}

var testObj = new Obj("Hello,World!");
testObj.shout();坦白的說,之前我并沒有在 Javascript 類中使用 setTimeout/setInterval 的經驗,所以開始就很草率的認為這是無法實現的。但是經過深思熟慮以后發現是可以實現的。退一步說,隔五秒執行某段語句是非常容易實現的。比如不考慮別的因素,題目中的函數是可以這樣寫:

this.waitAndShout = function(){
setTimeout('this.shout()', 5000);
}在運行以后,誰都會意識到 this 這個變量是無法找到的。但是這是為什么呢,很快就可以意識到,其實 setTimeout/setInterval 是 window 對象的一個方法,所以也可以寫成 window.setTimeout/window.setInterval,那么上述的 this.shout() 就非??梢匀菀桌斫鉃槭裁床荒軋绦辛?,因為它實際上調用的是 window.shout() 。

知道了原因以后解決起來就非常的容易了,只要將對象綁定到 window 對象下就可以(我對 Javascript 有趣的對象機制感到興奮)。那么,上述的函數再做一個小的修改:

this.waitAndShout = function() {
window.Obj = this;
setTimeout('Obj.shout()', 5000);
}這樣就可以了。實際上

setTimeout('Obj.shout()', 5000);等價于

window.setTimeout('window.Obj.shout()', 5000);另外,之前我也想到將對象保存為數組,然后引用調用,代碼如下:

function ObjectClass (property) {
this.property = property;
this.id = ObjectClass.cnt;
ObjectClass.objects[ObjectClass.cnt++] = this;
this.method = ObjectClass_method;
}

ObjectClass.cnt = 0;
ObjectClass.objects = new Array();

function ObjectClass_method () {
setTimeout('ObjectClass.objects[' + this.id + '].method();', 5000);
}

var obj1 = new ObjectClass('feelinglucky');
obj1.method();不過個人感覺還是上述第一種方法清晰得多。

后記,Javascript 看來的確還是很多需要謹慎對待的地方,尤其是對象機制。就猶如我之前所說的,Javascript 并不比其他語言要復雜,但是它也沒有你想象中的簡單。

PS:完成這道題目以后, Google 發現其他的兄弟早已經解決了此類的問題,比如這里還有這里,可以對比參考一下。


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

更新,感謝 Sheneyan 兄弟的提醒,還有另外的一個辦法就是通過 Closure(閉包) 來實現,代碼如下:

var Obj = function(msg){
this.msg = msg;
this.shout = function() {
alert(this.msg);
this.waitAndShout();
}

var _self = this;
this.waitAndShout = function() {
setTimeout(function(){_self.shout()}, 5000);
}
}

var testObj = new Obj("Hello,World!");
testObj.shout();看來這道題已經不能再害人了 :^)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

在Javascript類中使用setTimeout_javascript技巧

在Javascript類中使用setTimeout_javascript技巧:最近遇到了一道 Javascript 考題,內容如下: 嘗試實現注釋部分的 Javascript 代碼,可在其他任何地方添加更多 代碼(如不能實現,說明一下不能實現的原因): var Obj = function(msg){ this.msg = msg; this.shout = funct
推薦度:
標簽: js javascript timeout
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩欧美在线综合网高清 | 亚欧精品一区二区三区 | 精品视频免费看 | 欧美亚洲图区 | 国产福利一区二区三区在线视频 | 欧美色爽 | 亚洲一区二区三区在线免费观看 | 亚洲一二三区在线观看 | 欧美日韩亚洲第一页 | 国产伦精一区二区三区 | 国产区视频在线观看 | 精品国产欧美一区二区五十路 | 国产高清特黄无遮挡大片 | 乱妇伦交 | 亚洲a毛片 | 日本一区二区三区免费在线观看 | 国产日韩中文字幕 | 91在线 | 欧美 | 国产成人麻豆精品video | 欧美 在线播放 | 久久久视| 国产在线精品成人一区二区三区 | 国产在线精品一区二区三区 | 国产精品久久久久久久久久久久 | 日本一区二区三区免费在线观看 | 国产精选视频在线观看 | 欧美成人高清在线视频大全 | 欧美日韩色图 | 久久婷婷久久一区二区三区 | 国产日韩欧美亚洲综合在线 | 亚洲视频第一页 | 亚州激情 | 日韩午夜免费电影 | 91久久国产综合精品女同国语 | 欧美激情一区二区三区 | 中文字幕一区二区三区久久网站 | 国产成人三级经典中文 | 中文字幕在线不卡 | 国产精品毛片va一区二区三区 | 国产一区在线视频观看 | 国产一区二区三区在线视频 |