//装饰者模式:就是在保证不改变原有对象的基础上,去扩展一些想要的方法或去求var CarInterface = new BH.Interface('CarInterface' , ['getPrice' , 'assemble']);var Car = function(car){ //也可以这样写类。//让子类都有这个属性this.car = car ; //检查接口BH.Interface.ensureImplements(this , CarInterface);};Car.prototype = {constructor :Car,getPrice:function(){return 200000 ; },assemble:function(){document.write('组装汽车...');}};var LightDecorator = function(o){ //函数调用的时候执行//继承属性并传值,this.car = car,此时传进来的car是上面的Car对象。LightDecorator.superClass.constructor.call(this , o);/*相当于复制代码:this.car = car ; BH.Interface.ensureImplements(this , CarInterface);*/};BH.extend(LightDecorator , Car);  //立即执行LightDecorator.prototype = {constructor:LightDecorator , getPrice:function(){return  this.car.getPrice() + 10000; },assemble:function(){document.write('组装车灯...');}                    };var IceBoxDecorator = function(o){//继承属性并传值,this.car = car,此时传进来的car是上面的LightDecorator对象。js没有多态概念,IceBoxDecorator.superClass.constructor.call(this , o);                    };BH.extend(IceBoxDecorator , Car);  //原型继承 IceBoxDecorator.prototype = {constructor:IceBoxDecorator , getPrice:function(){return  this.car.getPrice() + 20000; },assemble:function(){document.write('组装车载冰箱...');}                    };                var car  = new Car();alert(car.getPrice());car.assemble();var L = new LightDecorator(car);alert(L.getPrice());L.assemble();        var I = new IceBoxDecorator(L);alert(I.getPrice());I.assemble();        

//装饰者 不仅可以用在类上, 还可以用在函数上//返回一个当前时间的字符串表示形式function getDate(){return (new Date()).toString();};// 包装函数 (装饰者函数)function upperCaseDecorator(fn){return function(){return fn.apply(this, arguments).toUpperCase();}};alert(getDate());var getDecoratorDate = upperCaseDecorator(getDate);alert(getDecoratorDate());

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6884786.html,如需转载请自行联系原作者

js29--装饰着模式相关推荐

  1. java设计模式----装饰器模式

    Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样.因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象. 它必须拥有与被装饰对象相同的接口. ...

  2. Android 设计模式:(三)装饰者模式 —— 装饰对象

    *利用组合(composition)和委托(delegation)可以在运行时实现继承行为的效果,动态地给对象加上新的行为. *利用继承扩展子类的行为,是在编译时静态决定的:利用组合的做法,可以在运行 ...

  3. java I/O之装饰者模式

    装饰者: Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案. 装饰者模式意图: 动态的给一个对象添加额外的职责.Decorato ...

  4. 如何利用装饰者模式在不改变原有对象的基础上扩展功能

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:双子孤狼 blog.csdn.net/zwx9001 ...

  5. 这是我见过最通俗易懂的 装饰者模式 讲解了!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:lewis0077 cnblogs.com/lewis007 ...

  6. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  7. 《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

    在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方面,继承这种功能复 ...

  8. 3年工作必备 装饰器模式

    故事 古话说的好:人靠衣裳马靠鞍.下面先带大家来熟悉这句话的背景: 人靠衣装马靠鞍,狗配铃铛跑的欢出自沈自晋<望湖亭记>第十出:"虽然如此,佛靠金装,人靠衣装,打扮也是很要紧的. ...

  9. 装饰者模式 php,PHP设计模式之装饰器模式

    装饰器设计模式 什么是装饰器模式 装饰器模式就是对一个已有的结构增加装饰.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象 ...

  10. 漫画设计模式:什么是 “装饰器模式” ?

    作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) -----  第二天  ----- ------------ 装饰器模式都包含哪些核心角色呢? 1. Compone ...

最新文章

  1. HotSpot虚拟机对象的创建过程
  2. ?php query_posts(cat)?,query_posts()函数 (wordpress日志调用)
  3. linux进程泄露命令明文参数,sshpass 使Linux可以明文参数输入SSH密码(示例代码)
  4. 用贪心算法来解决沙袋装箱问题
  5. 修改ORACLE RAC的字符集(记录一下)
  6. vc++ 类 定时器api_关于JS中一些重要的api实现, 巩固你的原生JS功底
  7. 怎么解决文件正在使用无法删除----资源监视器
  8. NET 常见网络命令
  9. 计算机视觉项目实战-基于特征点匹配的图像拼接
  10. 中国ROHS 2.0 ---sj/t 11364-2014
  11. 代码还是要亲自动手写才行啊
  12. MATLAB画图(一)
  13. window.onload的使用
  14. [20071016]WindowsXP优化
  15. 1056: 约瑟夫问题【n人围成一圈,报数为3的人退出圈子,问最后留下的人原来的编号。】
  16. 一份完整的SEO方案包含哪些内容
  17. [电路]12-回路电流法
  18. 解决一个八阿哥bug的方法
  19. SpringBoot与安全学习笔记
  20. 断食3天能重启免疫系统?坚持断食的人,身体都怎么样了?

热门文章

  1. 2000条你应知的WPF小姿势 基础篇69-73 WPF Freeze机制和Template
  2. 网络GHOST使用方法
  3. PDFtoDXF or other Vector Graphics (PDF转 Autocad 的DXF及其他格式矢量图形):pstoedit+Ghostscript...
  4. Openning Day
  5. 不满当免费劳力,NPM 热门库 “colors” 和 “faker” 的作者设无限循环
  6. Linux 修复严重的内核代码执行漏洞
  7. 沙场白帽老兵聊未来的挖洞方向及其它
  8. 谁在指使这家印度 IT 公司攻击全球政治家、投资者和记者?
  9. 使用shell实现zookeeper集群的自动搭建
  10. 卸载SD卡对MediaServer的处理