常见的6种JavaScript设计模式

常见的6种JavaScript设计模式

构造函数模式

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

工厂模式

/*** 工厂模式*/
function Animal(opts){var obj = new Object();obj.name = opts.name;obj.color = opts.color;obj.getInfo = function(){return '名称:'+obj.name +', 颜色:'+ obj.color;}return obj;
}
var cat = Animal({name: '波斯猫', color: '白色'});
cat.getInfo();

模块模式

/*** 模块模式 = 封装大部分代码,只暴露必需接口*/
var Car = (function(){var name = '法拉利';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);

发布订阅模式

/*** 发布订阅模式*/
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', '绑定');

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

峰度(Kurtosis)和偏度(Skewness)

峰度&#xff08;Kurtosis&#xff09; 定义峰度又称峰态系数&#xff0c;表征概率密度分布曲线在平均值处峰值高低的特征数&#xff0c;即是描述总体中所有取值分布形态陡缓程度的统计量。直观看来&#xff0c;峰度反映了峰部的尖度。这个统计量需要与正态分布相比较。 公式定…

1.27

测试程序提出问题并解决转载于:https://www.cnblogs.com/JustinTimberlake/p/10028870.html

javascript设计模式系列 - LukeLin - 博客园

javascript设计模式系列 创建型&#xff1a; 1.抽象工厂模式&#xff08;Abstract Factory&#xff09; 2.构建者模式&#xff08;Builder&#xff09; 3.工厂方法模式&#xff08;Factory Method&#xff09; 4.原型模式&#xff08;Prototype&#xff09; 5.单例模式&a…

多功能嵌入式解码软件(2)

多功能嵌入式解码软件&#xff08;2&#xff09; 验证类库 通信协议 下面进行一个示例&#xff1a; 下位机需要向上位机发送3中数据帧&#xff0c;数据帧以功能码来识别&#xff0c;每种数据帧的协议如下3个表格所示&#xff0c;上位机需要把这些数据按照协议解码出来&#xff…

vue项目如何打包扔向服务器 - Hi-Sen - 博客园

当我们将 vue 项目完成后&#xff0c;面临的就是如何将项目进行打包上线&#xff0c;放到服务器中。我使用的是 vue-cli&#xff08;simple&#xff09; 脚手架&#xff0c;所以就讲一下如何将项目进行打包&#xff0c;并放到 tomcat 上。 如果是 vue-cli (非 simple 脚手架…

MySQL备份与恢复-mysqldump备份与恢复

这片博文主要用来介绍MySQL的备份与恢复&#xff1a; MySQL的备份形式可以分为如下几种&#xff1a; 热备----即不停机备份冷备----需要关闭MySQL&#xff0c;然后备份其数据文件。&#xff08;停机备份一般是直接拷贝其datadir目录&#xff09;温备----在线备份&#xff0c;对…

第六次实训作业异常处理

第六次实训作业异常处理 编写一个类ExceptionTest&#xff0c;在main方法中使用try-catch-finally语句结构实现&#xff1a;在try语句块中&#xff0c;编写两个数相除操作&#xff0c;相除的两个操作数要求程序运行时用户输入&#xff1b;在catch语句块中&#xff0c;捕获被0除…

k8s学习笔记-调度之Affinity

Kubernetes中的调度策略可以大致分为两种 一种是全局的调度策略&#xff0c;要在启动调度器时配置&#xff0c;包括kubernetes调度器自带的各种predicates和priorities算法&#xff0c;具体可以参看上一篇文章&#xff1b; 另一种是运行时调度策略&#xff0c;包括nodeAffinity…

vue-cli webpack配置分析 - chenBright - SegmentFault 思否

相信vue使用者对vue-cli都不会陌生&#xff0c;甚至可以说&#xff0c;很熟悉了&#xff0c;但对其webpack的配置可能知之甚少吧。 过完年回来后&#xff0c;我接手了公司的新项目。新项目是一个spa。很自然&#xff0c;我就想到了vue-cli脚手架了&#xff0c;当时研究一下它的…

[Xcode 实际操作]六、媒体与动画-(6)使用UIBlurEffect给图片添加模糊效果

目录&#xff1a;[Swift]Xcode实际操作 本文将演示如何给图像添加模糊效果。 在项目导航区&#xff0c;打开视图控制器的代码文件【ViewController.swift】 1 import UIKit2 3 class ViewController: UIViewController {4 5 override func viewDidLoad() {6 super.…

MapReduce编程实践

一、MapReduce编程思想 学些MapRedcue主要是学习它的编程思想&#xff0c;在MR的编程模型中&#xff0c;主要思想是把对数据的运算流程分成map和reduce两个阶段&#xff1a; Map阶段&#xff1a;读取原始数据&#xff0c;形成key-value数据&#xff08;map方法&#xff09;。即…

webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server - QxQstar - 博客园

一.webpack基础 1.在项目中生成package.json&#xff1a;在项目根目录中输入npm init&#xff0c;根据提示输入相应信息。&#xff08;也可以不生成package.json文件&#xff0c;但是package.json是很有用的&#xff0c;所有建议生成&#xff09; 2.安装webpaack a.在全局中安装…

(十)

空转载于:https://www.cnblogs.com/shanae/p/10034479.html

编译原理--NFA/DFA

现成的, 讲义: https://www.cnblogs.com/AndyEvans/p/10240790.html https://www.cnblogs.com/AndyEvans/p/10241031.html 一个例子, 写得非常好. 一下子就全明白了, 尤其是像我这种没有听过编译原理课程的人. https://blog.csdn.net/tyler_download/article/details/53139240 …

Python中pass的用法

空语句 do nothing保证格式完整保证语义完整以if语句为例&#xff0c;在c或c/java中&#xff1a; if(true); //do nothingelse{ //do something}对应于python就要这样写&#xff1a; if true: pass #do nothingelse: #do something 1 pass语句在函数中的作用当你在编写一个程序…

express路由管理的几种自动化方法分享-js教程-PHP中文网

我们平时在使用express写代码的过程中&#xff0c;会根据类别&#xff0c;将路由分为多个不同的文件&#xff0c;然后在项目的入口文件&#xff08;例如app.js&#xff09;中将其依次挂载&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 const index require(./routes/index) con…

dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件

>>这台电脑>>属性>>高级系统设置>>环境变量>>系统变量>>Path>>编辑>> 变量值中添加 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem; 即可。转载于:https://www.cnblogs.com/ZCrystal/p/10894591.html

转载 vue的基础使用

转载https://www.cnblogs.com/majj/p/9957597.html#top vue的介绍 前端框架和库的区别nodejs的简单使用vue的起步指令系统组件的使用过滤器的使用watch和computed钩子函数渐进式的JavaScript框架 vue react angualr作者:尤雨溪 facebook 谷歌公…

Express实现路由分发控制、RESTful API

Express实现路由分发控制、RESTful API 标签&#xff08;空格分隔&#xff09;&#xff1a; Node.js 最近在用Express作为自己的WEB应用框架&#xff0c;其中最为迷惑的就是Express的路由控制和分发&#xff0c;在网上搜了很多资料&#xff0c;但是大部分的资料都是将Express的…

springboot运行jar包时候加载指定目录的其他jar支持包

最近发生一个小故障&#xff0c;调试好的项目&#xff0c;发布成jar包后无法找到oracle的驱动&#xff0c;研究了一下解决了。记录一下。写了一个run.sh脚本 #!/bin/bash cd ~ cd app nohup java -Djava.ext.dirs./lib -Doracle.jdbc.thinLogonCapabilityo3 -jar -Xms512m -Xmx…