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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
javascript检查日期格式的函数[比较全]
Oct 17 Javascript
javascript 拖动表格行实现代码
May 05 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
jquery限定文本框只能输入数字即整数和小数
Nov 29 Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
Mar 26 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
Vue-不允许嵌套式的渲染方法
Sep 13 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
小程序实现分类页
Jul 12 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
VFP与其他应用程序的集成
2006/10/09 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
js初始化验证实例详解
2016/11/26 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
Python实现定时任务
2017/02/08 Python
python开发简易版在线音乐播放器
2017/03/03 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
python实现dijkstra最短路由算法
2019/01/17 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
人事行政主管岗位职责
2013/12/22 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
岗位聘任协议书
2015/09/21 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL