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 捕获窗口关闭事件
Jul 26 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
May 13 Javascript
Javscript删除数组中指定元素并返回新数组
Mar 06 Javascript
javascript的动态加载、缓存、更新以及复用(一)
Jun 09 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
浅谈Javascript中匀速运动的停止条件
Dec 19 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
Angular2监听页面大小变化的解决方法
Oct 09 Javascript
关于JavaScript语句后面的分号问题
Dec 07 Javascript
vue watch深度监听对象实现数据联动效果
Aug 16 Javascript
JS html事件冒泡和事件捕获操作示例
May 01 Javascript
如何利用JavaScript编写更好的条件语句详解
Aug 10 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
pw的一个放后门的方法分析
2007/10/08 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
python使用pymysql实现操作mysql
2016/09/13 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python 调用有道api接口的方法
2019/01/03 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
付款委托书范本
2014/04/04 职场文书
《长相思》听课反思
2014/04/10 职场文书
4s店活动策划方案
2014/08/25 职场文书
违反交通法规检讨书
2014/09/10 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
使用feign服务调用添加Header参数
2021/06/23 Java/Android