Re: [問題] 關於物件與計時器
※ 引述《awpadam (三瘋)》之銘言:
: 請問各位前輩
: 以下,我想重複執行某個物件的某個method
: 但是為甚麼程式不是一秒增加一個a,而是瞬間增加無數個a
: <html>
: <body>
: <input id="test" type="text" >
: <script>
: addtext=function(){
: this.add=function(){
: document.getElementById('test').value+='a';
: setTimeout(this.add(),1000);
^^^^^^^^^
提醒你一件事情 函數有()表示是執行喔
也就是在add還沒跑完你就又跑一次add()
這時候就形成recursive(遞迴) 所以才會瞬間無限多a
反而你的setTimeout沒有任何意義
(解法是去掉() 把它當成員就ok了)
另外一個問題就是另一位版友回文的scope問題 ̄▽ ̄
在這一點上我比較傾向用工廠方法的模式來產生物件,
因為this這個關鍵字常常讓人混淆主體。
────────────────────────────────
<head>
<script LANGUAGE="JavaScript">
<!--
addtext=function(str){
var obj={};
obj._str=str;
obj._obj=this;
obj.add=function(){
document.getElementById('msg').innerHTML+=obj._str;
setTimeout(
function(){
obj.add();
}
,1000
);
}
return obj;
}
function init(){
var myobj = new addtext("hi");
myobj.add();
var myobj2 = new addtext("hello");
myobj2.add();
}
-->
</script>
</head>
<body onload="init();">
<div id="msg"></div>
</body>
: 雖然正常執行了,不過我的add函式他本身想要的功能就是自己無限的執行
: 而不是必須靠全域使用setInterval
: 請問該怎麼解呢?
: 再來還有個小問題
: 為甚可以正常執行的那段中的setInterval("myobj.add()",1000);
: 如果第一個參數沒有加上雙引號變成字串,是不能執行的呢(難道他用eval在實做?)
: 以上
你可以把它看成eval() ,
或者你可以參照我的方式來寫function(){},
只是這樣會製造多餘的function殘渣。
你也可以寫成 myobj.add
因為那裡要傳入的 要嘛就是 evalStr ,
要嘛就是 function型態的 variable or member。
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.77.239
→
03/06 18:05, , 1F
03/06 18:05, 1F
→
03/06 18:08, , 2F
03/06 18:08, 2F
推
03/06 19:07, , 3F
03/06 19:07, 3F
→
03/06 20:47, , 4F
03/06 20:47, 4F
→
03/06 20:48, , 5F
03/06 20:48, 5F
推
03/06 22:38, , 6F
03/06 22:38, 6F
討論串 (同標題文章)
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章