• JavaScript设计模式-17.装饰者模式(下)


     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>javascript高级语法17-装饰者模式下</title>
     6     </head>
     7     <body>
     8         <div id="demo2">
     9             
    10         </div>
    11         
    12         <script type="text/javascript">
    13             //装饰者可以用在类上,也可以用在函数上            
    14             function demo1(){
    15                 //写一个装饰者函数,函数的目的是把目标函数的返回值变成大写            
    16                 function upperCase(fun){
    17                     return function(){
    18                         return fun().toUpperCase();
    19                     }    
    20                 }
    21                 //被封装的函数
    22                 function getDate(){
    23                     return new Date().toString();
    24                 }
    25                 //执行装饰
    26                 var getDateCaps = upperCase(getDate);
    27                 document.write(getDate());
    28                 document.write("<br>")
    29                 document.write(getDateCaps());
    30                 /*如果原有的功能不适合你的项目,需要大量扩充原油功能
    31                  * 并且不想改变原有的接口,那么可以用装饰者模式。
    32                  */            
    33             }
    34             //demo1();
    35             
    36             
    37             function demo2(){
    38                 //装饰者完成对函数性能测试的任务
    39                 var listBuilder = function(el,listSize){
    40                     this.el = document.getElementById(el);
    41                     this.size = listSize;
    42                     //创建列表
    43                     this.Buildlist = function(){
    44                         var root = document.createElement("ol");
    45                         this.el.appendChild(root);
    46                         for(var i=0;i<this.size;i++){
    47                             var li = document.createElement("li");
    48                             root.appendChild(li);
    49                         }
    50                     }
    51                 };
    52                 var list = new listBuilder("demo2",8000);
    53                 //list.Buildlist();
    54                 //利用装饰者检测函数执行的时间
    55                 
    56                 var simpleProfiler = function(component){
    57                     this.component = component;
    58                     this.ListBuilder = function(){
    59                         var startDate = new Date().getTime();
    60                         this.component.Buildlist()
    61                         var endDate = new Date().getTime();
    62                         alert(endDate - startDate);
    63                     }
    64                 }
    65                 //new simpleProfiler(list).ListBuilder();
    66                 //改造为通用的装饰者,可以完成所有函数的效率测试。
    67                 
    68                 var simpleProfiler2 = function(component){
    69                     this.component = component;
    70                     this.action = function(methodName){
    71                         var self= this;
    72                         var method = component[methodName];
    73                         //如果是函数那就进行装饰
    74                         if(typeof method == "function"){
    75                             var startDate = new Date().getTime();
    76                             method.apply(self.component,arguments);
    77                             var endDate = new Date().getTime();
    78                             alert(endDate - startDate);
    79                         }
    80                     }
    81                 }
    82                 
    83                 new simpleProfiler2(list).action("Buildlist");
    84                 
    85             }
    86             demo2();
    87 
    88         </script>
    89     </body>
    90 </html>
  • 相关阅读:
    2020年秋第四五周-代码规范,结对要求
    2020年秋第四五周-四则运算试题生成
    同时装了WPS和Office新建的时候不知道是哪个文件
    开讲啦郑强演讲:你为什么读大学?
    PC版kindle无法连接网络
    前端编程良好习惯
    教你隐藏盘符,把你的小姐姐藏起来
    腾讯,比你想的更有趣
    U盘之父中国朗科的一生:我曾打败索尼,如今却只能靠收租为生
    动作之概述
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/7191812.html
Copyright © 2020-2023  润新知