装饰者模式试玩
今天突然想玩玩装饰者模式。
这个模式行为是,给对象加一个新方法,在不改变对象原因有方法的基础上。
网上找到的示例代码如下:
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,把注释去掉,就可以啦。
这样的做法,挺坏。会使得程序不好预测。
合乎自然而生生不息。。。


浙公网安备 33010602011771号