zoukankan      html  css  js  c++  java
  • 装饰者模式试玩

    今天突然想玩玩装饰者模式。

    这个模式行为是,给对象加一个新方法,在不改变对象原因有方法的基础上。

    网上找到的示例代码如下:

    function ABicycle(){ }
    ABicycle.prototype = {
        wash : function(){ },
        ride : function(){ },
        getPrice : function(){ 
            return 999; 
        }
    }
    
    function bicycleBell( bicycle ){
        var price= bicycle.getPrice();
    
        bicycle.bell = function(){
            console.log("ding! ding! ding!");
        };
    
        bicycle.getPrice = function(){
                return price + 100;
        };
        return bicycle;
    }
    
    var bicycleA = new ABicycle();
    bicycleA = bicycleBell( bicycleA );

    我异想天开,想用函数的方法,且改变函数的原有结构。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>装饰者模式——函数式写法</title>
            <script type="text/javascript">
                function a1(){
                    return 3;
                }
                
                function addA(aFn){
                    var c= aFn();
                    aFn = function(){
                        return c + 2;
                    }
    
                }
                
    //            function addA(aFn){
    //                var c= aFn();
    //
    //                var aFnName = aFn.name;
    //                eval(aFnName +' = function(){return c + 2;}');
    //
    //            }
    //            
                console.log(a1());
                addA(a1);
                console.log(a1());
            </script>
        </head>
        <body>
            
        </body>
    </html>

    代码执行,当然不行啦,因为函数和数字,字符串一样都是值传递。倒是数组,对象是引用传递。

    用邪恶的eval,把注释去掉,就可以啦。

    这样的做法,挺坏。会使得程序不好预测。

  • 相关阅读:
    JVM调优2
    CAP理论/AP架构/CP架构
    JDK8 JVM性能优化-1
    string+和stringbuffer的速度比较
    @SpringBootApplication注解分析
    Spring Cloud底层原理
    Window 下安装 redis
    Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析
    多线程捕获线程中的异常
    将 HTML 页面内容转换为图片或PDF文件
  • 原文地址:https://www.cnblogs.com/samwu/p/4063418.html
Copyright © 2011-2022 走看看