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 相关文章推荐
asp javascript 实现关闭窗口时保存数据的办法
Nov 24 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
js 走马灯简单实例
Nov 21 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
jquery 抽奖小程序实现代码
Oct 12 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
vue-resouce设置请求头的三种方法
Sep 12 Javascript
JS实现简单的浮动碰撞效果示例
Dec 28 Javascript
JavaScript中为事件指定处理程序的五种方式分析
Jul 27 Javascript
如何利用ES6进行Promise封装总结
Feb 11 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
php自定义分页类完整实例
2015/12/25 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
代码生成器 document.write()
2007/04/15 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
结婚喜宴主持词
2014/03/14 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书