书签 分享 收藏 举报 版权申诉 / 25

类型JavaScript设计模式之策略模式.docx

  • 文档编号:26404573
  • 上传时间:2023-06-19
  • 格式:DOCX
  • 页数:25
  • 大小:52.16KB
 

18.     

19.         

20.    

 

21.    

 

22.        

 

23.    

 

24.     

25.     

26.        var tPrice = document.getElementsByClassName("tPrice"), 

27.            tNum   = document.getElementsByClassName("tNum"), 

28.            tAlg   = document.getElementsByClassName("tAlg"), 

29.            tMoney = document.getElementsByClassName("tMoney"), 

30.            total  = document.querySelector("#total"); 

31. 

32.        var addBtn = document.querySelector("#addBtn"); 

33.        addBtn.addEventListener("click",function(){ 

34.            var html = '

正常收费满300减100打8折

'; 

35.            var div = document.createElement("div"); 

36.            div.className="block"; 

37.            div.innerHTML = html; 

38.            this.parentNode.parentNode.insertBefore(div,this.parentNode); 

39.        }) 

40. 

41.         

42.        function calculate(e){ 

43. 

44.            //根据事件对象判断事件源,获取同类元素中的位置 

45.            var num = 0,className = e.target.className; 

46.            switch(className){ 

47.                case "tPrice":

 

48.                    for(var i=tPrice.length-1;i>=0;i--){ 

49.                        if(tPrice[i]==e.target){ 

50.                            num = i; 

51.                        } 

52.                    } 

53.                    break; 

54.                case "tNum":

 

55.                    for(var i=tNum.length-1;i>=0;i--){ 

56.                        if(tNum[i]==e.target){ 

57.                            num = i; 

58.                        } 

59.                    } 

60.                    break; 

61.                case "tAlg":

 

62.                    for(var i=tAlg.length-1;i>=0;i--){ 

63.                        if(tAlg[i]==e.target){ 

64.                            num = i; 

65.                        } 

66.                    } 

67.                    break; 

68.                default:

 

69.                    return; 

70.            } 

71. 

72. 

73.            var context = new Context(tAlg[num].value); 

74.            var money   = 0; 

75.            var totalValue = 0; 

76. 

77.            money = context.ContextInterface(tPrice[num].value*tNum[num].value); 

78. 

79.            tMoney[num].value = money; 

80. 

81.            for(var index=0,len=tMoney.length;index

82.                totalValue += tMoney[index].value*1; 

83.            } 

84.            total.value = totalValue; 

85.        } 

86. 

87.        //绑定DOM事件 

88.        // tPrice[0].addEventListener('keyup',calculate,false); 

89.        // tNum[0].addEventListener('keyup',calculate,false); 

90.        // tAlg[0].addEventListener('change',calculate,false); 

91. 

92.        document.addEventListener('keyup',calculate,false); 

93.        document.addEventListener('change',calculate,false); 

94.     

95. 

96. 

最开始我对商品单价、数量、计算方式仅提供一个可操作的地方,这也是《大话设计模式》一书中产品的基本形态,考虑到更良好交互性,我增加了一个按钮,可以增加更多行。

这带来的一点小问题就是:

起初我只需要为几个元素绑定事件即可,现在要对可能产生的更多元素绑定事件,所以我就选择了“事件代理”,获得发生事件的元素位置,改变同一行中的相应元素的值,对于总价,则总是遍历所有的单行总价相加。

BTW,在获取元素的时候使用了getElementsByClassName而没有使用querySelectorAll,是因为后者获取的不是一个动态集合。

接着我尝试将昨天学习的观察者设计模式与策略模式混合起来,起初我是这样做的....

1.

DOCTYPE html> 

2. 

3. 

4.     

5.    Document 

6.     

7.        .block { 

8.            padding:

5px 0; 

9.            border-bottom:

1px solid #ccc; 

10.        } 

11.        .menu {margin:

10px auto;text-align:

 center;} 

12.     

13. 

14. 

15.     

16.        

正常收费满300减100打8折

 

17.    

 

18.     

19.         

20.    

 

21.    

 

22.        

 

23.    

 

24.     

25.     

26. 

27.        //发布者 

28.        function Publisher(obj){ 

29.            t

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
JavaScript 设计 模式 策略
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:JavaScript设计模式之策略模式.docx
链接地址:https://www.bdocx.com/doc/26404573.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开