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 相关文章推荐
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
JQuery筛选器全系列介绍
Aug 27 Javascript
jquery滚动条插件jScrollPane的使用介绍
Nov 08 Javascript
jquery submit ie6下失效的原因分析及解决方法
Nov 15 Javascript
jquery ajax,ashx,json的用法总结
Feb 12 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
详解Vue 2.0封装axios笔记
Jun 22 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 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
一个目录遍历函数
2006/10/09 PHP
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
python实现机器人行走效果
2018/01/29 Python
Selenium的使用详解
2018/10/19 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
基于python实现对文件进行切分行
2020/04/26 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
美国在线购物频道:Shop LC
2019/04/21 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
毕业生应聘求职信
2014/07/10 职场文书
新闻传播专业求职信
2014/07/22 职场文书
保密工作目标责任书
2014/07/28 职场文书
政协调研汇报材料
2014/08/15 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
旷工检讨书1000字
2015/01/01 职场文书
大学毕业生自我评价
2015/03/02 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
Golang 遍历二叉树
2022/04/19 Golang
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android