文章出處
文章列表
今天突然想玩玩裝飾者模式。
這個模式行為是,給對象加一個新方法,在不改變對象原因有方法的基礎上。
網上找到的示例代碼如下:
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,把注釋去掉,就可以啦。
這樣的做法,挺壞。會使得程序不好預測。
文章列表
全站熱搜