原帖子發(fā)表在
http://community.csdn.net/Expert/TopicView.asp?id=4069144
有csdn的朋友把 http://community.csdn.net/Expert/TopicView.asp?id=3191873 給翻了出來(lái),這樣在javascript中模擬多線程又有了更漂亮的做法了:
有的時(shí)候command模式也許不是最好的辦法,比如我之前寫(xiě)的例子。寫(xiě)那個(gè)例子純粹只是為了演示command確實(shí)可以用在javascript中,并不表示我們?nèi)魏螘r(shí)候都應(yīng)該優(yōu)先考慮這樣做。 至于command模式本身,我仍認(rèn)為它是最簡(jiǎn)潔優(yōu)美的模式之一,在我們用各種語(yǔ)言解決問(wèn)題的時(shí)候都可以考慮使用它,而不止于j2se。 套一句名言:如果你的工具箱里面只有榔頭這一樣工具,那么每個(gè)問(wèn)題在你的眼里看起來(lái)都象釘子 。
有csdn的朋友把 http://community.csdn.net/Expert/TopicView.asp?id=3191873 給翻了出來(lái),這樣在javascript中模擬多線程又有了更漂亮的做法了:
1
<
html
><
head
><
title
>
emu--用fason的參數(shù)化定時(shí)器模擬多線程
</
title
></
head
><
body
>
2
<
SCRIPT
LANGUAGE
="JavaScript"
>
3
<!--
4
5
var
_st
=
window.setTimeout;
6
window.setTimeout
=
function
(fRef,mDelay)
{
7
if
(
typeof
fRef
==
'
function
')
{
8
var
argu
=
Array.prototype.slice.call(arguments,
2
);
9
var
f
=
(
function
()
{fRef.apply(
null
,argu);}
);
10
return
_st(f,mDelay);
11
}
12
return
_st(fRef,mDelay);
13
}
14
15
var
_int
=
window.setInterval;
16
window.setInterval
=
function
(fRef,mDelay)
{
17
if
(
typeof
fRef
==
'
function
')
{
18
var
argu
=
Array.prototype.slice.call(arguments,
2
);
19
var
f
=
(
function
()
{fRef.apply(
null
,argu);}
);
20
return
_int(f,mDelay);
21
}
22
return
_st(fRef,mDelay);
23
}
24
25
26
function
startNewTask()
{
27
var
target
=
document.getElementById(
"
sampleResult
"
).cloneNode(
true
);
28
with
(target)
{
29
id
=
""
;style.display
=
"
block
"
;style.color
=
(Math.floor(Math.random()
*
(
1
<<
23
)).toString(
16
)
+
"
00000
"
).substring(
0
,
6
);
30
}
31
document.body.insertBefore(target,document.body.lastChild);
32
var
parameter
=
{target:target,n:
0
,result:
0
}
33
parameter.timer
=
setInterval(count,
1
,parameter);
34
}
35
36
function
count(parameter)
{
37
with
(parameter)
{
38
if
(
!
target.stop)
{
39
for
(
var
i
=
0
;i
<
speed;i
++
)
40
if
(n
<
MAX)result
+=
++
n;
41
target.innerHTML
=
result;
42
}
43
if
(n
>=
MAX)
{
44
clearInterval(timer);
45
setTimeout(
function
(elm)
{document.body.removeChild(elm)}
,
2000
,target);
46
}
47
}
48
}
49
50
var
speed
=
1111
;
51
var
MAX
=
100000
;
52
//
-->
53
</
SCRIPT
>
54
<
button
onclick
="startNewTask()"
>
開(kāi)始新線程
</
button
>
55
56
<
BR
><
BR
>
57
<
div
id
=sampleResult
onmouseover
="this.stop=true"
onmouseout
="this.stop=false"
style
="display:none;cursor:hand"
>
0
</
div
>
58
</
body
>
59
</
html
>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

有的時(shí)候command模式也許不是最好的辦法,比如我之前寫(xiě)的例子。寫(xiě)那個(gè)例子純粹只是為了演示command確實(shí)可以用在javascript中,并不表示我們?nèi)魏螘r(shí)候都應(yīng)該優(yōu)先考慮這樣做。 至于command模式本身,我仍認(rèn)為它是最簡(jiǎn)潔優(yōu)美的模式之一,在我們用各種語(yǔ)言解決問(wèn)題的時(shí)候都可以考慮使用它,而不止于j2se。 套一句名言:如果你的工具箱里面只有榔頭這一樣工具,那么每個(gè)問(wèn)題在你的眼里看起來(lái)都象釘子 。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
