JavaScript设计模式之装饰者模式定义与应用示例


Posted in Javascript onJuly 25, 2018

本文实例讲述了JavaScript设计模式之装饰者模式定义与应用。分享给大家供大家参考,具体如下:

在不改变原对象的基础上,通过对其进行包装扩展(添加属性或方法),使原有对象可以满足用户的更复杂需求,满足开闭原则,也不会破坏现有的操作。

适用场景:当遇到新的功能或需求需要对原来的操作做出更改时,若原来的操作比较复杂,可以把原来的操作原封不动地放在装饰者中,然后再添加新功能。

eg1:

function Person() {
}
Person.prototype.sayHello = function() {
  console.log('Hello, Alice!');
};
function Decorator(param) {
  this.person = param;
}
Decorator.prototype.sayHello = function() {
  this.person.sayHello();
  console.log('Hello, Bruce!');
};
Decorator.prototype.sayGoodbye = function() {
  console.log('Bye, everyone!');
};
new Decorator(new Person()).sayHello();
/*
输出:
Hello, Alice!
Hello, Bruce!
*/
new Decorator(new Person()).sayGoodbye();
/*
输出:
Bye, everyone!
*/

没有改变原有的构造函数对象,而是原封不动地拿过来,再添加新的方法。

eg2:

var div = document.getElementById('div');
div.onclick = function() {
  console.log('First click!');
}
var decorator = function() {
  var args = arguments;
  var element = document.getElementById(args[0]);
  if (typeof element.onclick === 'function') {
    var firstClick = element.onclick;
    element.onclick = function() {
      firstClick();
      args[1]();
    }
  }
  else
    element.onclick = args[1];
}
decorator('div', function() {
  console.log('Second click!');
});
/*
输出:
First click!
Second click!
*/

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
HTML5附件拖拽上传drop & google.gears实现代码
Apr 28 Javascript
javascript之Partial Application学习
Jan 10 Javascript
首页图片漂浮效果示例代码
Jun 05 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
javascript生成大小写字母
Jul 03 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
Bootstrap CSS布局之表格
Dec 17 Javascript
nginx配置React静态页面的方法教程
Nov 03 Javascript
js实现图片无缝循环轮播
Oct 28 Javascript
微信小程序页面间传递数组对象方法解析
Nov 06 Javascript
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 #Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 #Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
Jul 25 #Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
Jul 25 #Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
Jul 25 #Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 #Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
Jul 25 #jQuery
You might like
PHP制作图型计数器的例子
2006/10/09 PHP
php分页代码学习示例分享
2014/02/20 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
vuejs选中当前样式active的实例
2018/08/22 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
使用PDB模式调试Python程序介绍
2015/04/05 Python
使用python实现接口的方法
2017/07/07 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
python -v 报错问题的解决方法
2020/09/15 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
三星美国官网:Samsung美国
2017/02/06 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
旺仔牛奶广告词
2014/03/20 职场文书
产假请假条
2014/04/10 职场文书
二年级学生评语大全
2014/04/23 职场文书
李培根演讲稿
2014/05/22 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
娱乐节目策划方案
2014/06/10 职场文书
预防传染病方案
2014/06/14 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
法制主题班会教案
2015/08/13 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python