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 相关文章推荐
[Web]防止用户复制页面内容和另存页面的方法
Feb 06 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 Javascript
Javascript 数组排序详解
Oct 22 Javascript
JavaScript实现关键字高亮功能
Nov 12 Javascript
jquery实现清新实用的网页菜单效果
Aug 28 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
详谈for循环里面的break和continue语句
Jul 20 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
Vue.js 使用v-cloak后仍显示变量的解决方法
Nov 19 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
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
Javascript 入门基础学习
2010/03/10 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
详解package.json版本号规则
2019/08/01 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
python中的lambda表达式用法详解
2016/06/22 Python
Python实现随机选择元素功能
2017/09/14 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
香港礼品网站:GiftU eshop
2017/09/01 全球购物
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
房屋出售协议书
2014/04/10 职场文书
校园文明标语
2014/06/13 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
单位实习鉴定评语
2015/01/04 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
反腐倡廉观后感
2015/06/08 职场文书
信用卡收入证明范本
2015/06/12 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
Linux中文件的基本属性介绍
2022/06/01 Servers