标签: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]],
可以很方便地在不改变原来方法的情况下,添加方法。
哈哈,关键是有一个统一的地方。
标签:style blog io color ar java sp div on
原文地址:http://www.cnblogs.com/samwu/p/4063418.html