构造函数模式

/*** 构造一个动物的函数 */
function Animal(name, color){this.name = name;this.age= age;this.getName = function(){return this.name;}
}
// 实例一个对象
var dog= new Animal('狗', '8');
console.log( dog.getName() );

工厂模式

/*** 工厂模式*/
function Animal(opts){var obj = new Object();obj.name = opts.name;obj.age= opts.age;obj.getInfo = function(){return '名称:'+obj.name +', 年龄:'+ obj.age;}return obj;
}
var dog= Animal({name: '哈士奇', age: '6'});
dog.getInfo();

模块模式

/*** 模块模式 = 封装大部分代码,只暴露必需接口*/
var Car = (function(){var name = 'jeep自由光';function sayName(){console.log( name );}function getColor(name){console.log( name );}return {name: sayName,color: getColor}
})();
Car.name();
Car.color('红色')

混合模式

/*** 混合模式 = 原型模式 + 构造函数模式*/
function Animal(name, color){this.name = name;this.color = color;console.log( this.name  +  this.color)
}
Animal.prototype.getInfo = function(){console.log('名称:'+ this.name);
}function largeCat(name, color){Animal.call(null, name, color);this.color = color;
}largeCat.prototype = create(Animal.prototype);
function create (parentObj){function F(){}F.prototype = parentObj;return new F();
};largeCat.prototype.getColor = function(){return this.color;
}
var cat = new largeCat("Persian", "白色");
console.log( cat )

单例模式

/*** 在执行当前 Single 只获得唯一一个对象*/
var Single = (function(){var instance;function init() {//define private methods and properties//do somethingreturn {//define public methods and properties};}return {// 获取实例getInstance:function(){if(!instance){instance = init();}return instance;}}
})();var obj1 = Single.getInstance();
var obj2 = Single.getInstance();console.log(obj1 === obj2);

//2

var single = (function(){var unique;function getInstance(){// 如果该实例存在,则直接返回,否则就对其实例化if( unique === undefined ){unique = new Construct();}return unique;}function Construct(){// ... 生成单例的构造函数的代码}return {getInstance : getInstance}
})();

发布订阅模式

/*** 发布订阅模式*/
var EventCenter = (function(){var events = {};/*{my_event: [{handler: function(data){xxx}}, {handler: function(data){yyy}}]}*/// 绑定事件 添加回调function on(evt, handler){events[evt] = events[evt] || [];events[evt].push({handler:handler})}function fire(evt, arg){if(!events[evt]){return }for(var i=0; i < events[evt].length; i++){events[evt][i].handler(arg);}}function off(evt){delete events[evt];}return {on:on,fire:fire,off:off}
}());var number = 1;
EventCenter.on('click', function(data){console.log('click 事件' + data + number++ +'次');
});
EventCenter.off('click');   //  只绑定一次
EventCenter.on('click', function(data){console.log('click 事件' + data + number++ +'次');
});EventCenter.fire('click', '绑定');


脑壳疼的js设计模式相关推荐

  1. [js]设计模式小结对原型的修改

    js设计模式小结 工厂模式/构造函数--减少重复- 创建对象有new- 自动创建obj,this赋值- 无return原型链模式 - 进一步去重类是函数数据类型,每个函数都有prototypecons ...

  2. js observer 添加_简单了解4种JS设计模式

    阅读本文约需要5分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了15款有用前端开发的ST插件的知识,今天跟大家分享下4种 ...

  3. JS设计模式之Module(模块)模式、Revealing Module(揭示模块)模式

    Module(模块)模式 概念 Module模式最初被定义为一种在传统软件工程中为类提供私有和共有封装的方法. 通过这种方式,能够使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用局的特殊 ...

  4. js设计模式——3.观察者模式

    js设计模式--观察者模式 /*js设计模式--.观察者模式*/// 主题,保存状态,状态变化之后触发所有观察者对象 class Subject {constructor() {this.state ...

  5. js 设计模式学习(1)

    最近一个人外出旅行 顺便在那座城市买了一本关于JS设计模式的书 供无聊的时候阅读 却发现小有收获 旅游回来以后立马写下心得 做了一个地图 并以此总结此次旅行的经过的地方 尝试1: 尝试写JS类 1 v ...

  6. 剑灵灵动区服务器位置,《剑灵》这波电二合区,属实让我脑壳疼

    公长少苍:第一次玩剑灵我还是阴阳道仙的,第一次回坑的时候就变成花样年华了 发布于 2020-08-16 23:03:32 涵畅1:这都无所谓 主要是自打合完区就没有不卡过 发布于 2020-08-16 ...

  7. 20220512之脑壳疼

    个人博客地址:http://www.ltang.me/2022/05/12/20220512/ 最近的工作,包括但不限于: 评需求.评工作量.定排期, 跟人家说:不要再变啦再变自杀 沟通.看文档.写接 ...

  8. java多态优化多个if_脑壳疼!代码中那么多“烦人”的if else

    if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到脑壳疼. 图片来自 Pexels 例如下面这个伪代码: 是不是很崩溃?虽然他是伪代码,并且看起来也 ...

  9. Android Q 存储新特性适配脑壳疼?指南来了!

    码个蛋(codeegg)第 692 次推文 原文: https://mp.weixin.qq.com/s/aiDMyAfAZvaYIHuIMLAlcg 简单回顾下:Android Q 适配 之 存储新 ...

最新文章

  1. 为什么说混合云是新基建的流行架构?文末彩蛋!
  2. ISME:南农韦中等消减土壤青枯菌生物障碍新策略
  3. python报错 TypeError: an integer is required
  4. 1470. Shuffle the Array
  5. go语言的range使用
  6. [2019 牛客CSP-S提高组赛前集训营4题解] 复读数组(数论)+ 路径计数机(数上DP)+ 排列计数机(线段树+二项式定理)
  7. 电脑 linux系统下载官网,红旗Linux操作系统
  8. 集设分享最全字体帮合集,愿这些作品能给你带来灵感和启迪。
  9. [Java] 蓝桥杯BASIC-28 基础练习 Huffuman树
  10. UVA 12657 Boxes in a Line
  11. P3930 SAC E#1 - 一道大水题 Knight
  12. 计算机电源高频干扰,在高频开关电源设计中怎样抑制电磁干扰?
  13. 鸿蒙os2.0手机app开发,鸿蒙OS2.0手机开发者Beta版登场
  14. Cloud Solution Architect Certification 认证备考指南
  15. 盗版xp成功验证成正版,享受正版增值服务!
  16. 桌面图标快捷方式小箭头_如何在Windows 7、8和10中删除(或更改)快捷方式图标上的箭头...
  17. 方舟服务器在线人数查询软件,方舟生存进化怎么查看在线人数
  18. 电脑锁屏 快捷方式设置
  19. 系统动力学专拓考试重点总结
  20. Android使用Fragment打造万能页面切换框架(三)

热门文章

  1. React学习分享(五)
  2. 笔记本电脑win10系统,麦克风突然没声音了
  3. 每日词根——morph(形状)
  4. 红旗linux v11预览版下载,红旗 Linux 桌面系统发布 v11 预览版,1月10日开放下载
  5. Aligenie语音开发平台(天猫精灵)的对接记录
  6. java面向对象电梯运行代码_面向对象编程总结——多线程电梯
  7. python格式化输出(二):f-string格式化输出
  8. 阿里云呼叫中心发布,为企业提供更灵活可靠的热线服务
  9. 629 will: 各种用法tyg
  10. 图片加载成功后显示图片