码迷,mamicode.com
首页 > 其他好文 > 详细

20141030

时间:2014-10-30 20:33:53      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   java   sp   div   on   

一、

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

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

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

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,把注释去掉,就可以啦。

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

 

二、

订阅者模式,常见于事件绑定,样子如下。

[click:[fn1,fn2,fn3], input:[fn11,fn22,fn33]],

可以很方便地在不改变原来方法的情况下,添加方法。 

哈哈,关键是有一个统一的地方。

20141030

标签:style   blog   io   color   ar   java   sp   div   on   

原文地址:http://www.cnblogs.com/samwu/p/4063418.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!