【学习笔记】JS设计模式总结
前言:这段时间都在学习Vue的知识,虽然手边放着一本js高程,但确实好久没有好好复习了。温故而知新,因此特意把JS常见的设计模式总结,希望对大家有所帮助...
1. 工厂模式
释义:像工厂一样流水线般生产一个个对象
核心:return一个对象,创建不同的引用类型
// 工厂模式
function createPerson (){
//定义工厂
let person = {
name:'人',
walk:function(){
console.log('walk')
}
}
return person
}
let tangj = createPerson()
console.log(tangj.name) // 人
2. 构造函数模式
释义:在JavaScript里,构造函数通常是认为用来实现实例的,JavaScript没有类的概念,但是有特殊的构造函数。通过new关键字来调用自定义的构造函数,在构造函数内部,this关键字引用的是新创建的对象。
核心:属性邦到this上,方法绑到prototype上,使用new来新增实例
function People(){
this.name = '人' //把属性写在构造函数内部
}
People.prototype.walk = function(){
console.log('walk') //方法写在原型对象上
}
let tangj = new People()
console.log(tangj.name) //人
3. 单例模式
释义:保证一个类只有一个实例,并且仅提供一个访问它的全局访问点
核心:产生一个类的唯一实例
//单例模式
function createPeople (){
let name;
return function (useName){
return name || (name = useName) //如果name存在返回name,如果不存在返回传入的值
}
}
let single = createPeople()
console.log(single('tangj')) //tangj
console.log(single()) //tangj
console.log(single('tangjSir')) //tangj
4. 混合模式
释义:一般继承的过程就是混合模式
核心:提供能够被一个或一组子类简单继承功能的类
//混合模式
function People(name,age){
this.name = name
this.age = age
}
People.prototype.sayName = function(){
console.log(this.name)
}
function Student(name,age,score){
People.call(this,name,age);
this.score = score;
}
function creat(prototypeObj){
let empty = function(){};
empty.prototype = prototypeObj;
return new empty()
}
Student.prototype = creat(People.prototype);
Student.prototype.work = function(){
console.log('work')
}
5. 模块模式
核心:闭包
let Person = (function(){
let name = '小明';
function sayName(){
console.log(name)
}
return {
name:name,
sayName:sayName
}
})()
Person.sayName()//小明
6. 发布订阅模式
释义:多个订阅者绑定一个发布者,当订阅者监听到发布者变化执行回调函数
核心:绑定事件
let EventCenter = (function(){
let events = {};
function on(evt,handler){
//实现监听
//使用“或”是为了可以对同一个事件多次进行回调
events[evt] = events[evt] || [];
events[evt].push({
handler:handler
})
}
function fire(evt,args){
if(!events[evt]){
return
}
for(let i = 0;i<events[evt].length;i++){
//遍历实现对同一事件的多次回调
events[evt][i].handler(args)
}
}
function off(name){
delete events[name];
}
return {
on:on, //订阅者
fire:fire, //发布者
off:off //取消订阅
}
})()
EventCenter.on('hello',function (num){
console.log(num)
})
EventCenter.on('hello',function(num){
console.log(num)
})
EventCenter.fire('hello',1) //打印两次 1
【学习笔记】JS设计模式总结的更多相关文章
- amazeui学习笔记--js插件(UI增强)--警告框Alert
amazeui学习笔记--js插件(UI增强)--警告框Alert 一.总结 1.警告框基本样式:用am-alert声明div容器, <div class="am-alert" ...
- amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown 一.总结 1.am-dropdown(及其孩子):控制下拉列表的样式 2.data-am-dropdown(及其孩子):控 ...
- amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse
amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse 一.总结 注意点: 1.data-am-collapse:这个东西就是展开折叠事件 2.am-collapse(包括其下属 ...
- amazeui学习笔记--js插件(UI增强2)--按钮交互Button
amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...
- 前端学习:学习笔记(JS部分)
前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解) JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...
- JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...
- [学习笔记]JS 数组Array push相关问题
前言: 今天用写了一个二维数组,都赋值为零,然后更新其中一个值,结果和预期是不一样,会整列的相同位置都是同一个值. 1.用Chrome的控制台样例如下: arrs[2][2] =1的赋值,竟然是三个数 ...
- [学习笔记]JS计数器,闭包和localStorage
1.前言 Javascript也算用了挺久了,为了得到一个变量,类似Java的静态变量的功能,我想到了很早以前学习JS的闭包,还有做俄罗斯方块的排行榜用到LocalStorage技术,所以想总结一下, ...
- [置顶] 我的设计模式学习笔记------>Java设计模式总概况
设计模式的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计 ...
- 读书笔记:js设计模式
面向过程编程,面向对象编程和函数式编程> 定义一个类方法1:function Anim(){ } Anim.prototype.start = function(){ .. };Anim.pro ...
随机推荐
- SpringBoot集成redis,使用@Cachexxxx
一.引入相关依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- 微信公众号自定义菜单中添加emoji表情
做微信公众号开发,可能会遇到如何加入emoji表情的问题.今天在“海南旅游小管家”公众号的菜单中加入了emoji表情,特此记录备忘. 1.登录微信公众号,在左侧找到[开发者工具]菜单,点击进入,找到[ ...
- ActiveMQ_5死信队列
activemq死信队列 DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息. 出现以下情况时,消息会被redelivered: A transacted sessi ...
- MFC禁用关闭按钮
有时候我们在写MFC程序时,需要在对话框中开启线程处理一些事情,如果在线程执行过程中点击关闭按钮,会导致程序崩溃. 这里介绍一种解决方法,禁用关闭按钮 解决方法 开启线程前禁用关闭按钮 CMenu* ...
- ABP框架系列之二十六:(EventBus-Domain-Events-领域事件)
In C#, a class can define own events and other classes can register it to be notified when something ...
- Mac could not read from remote repository
IDE clone数据的时候要使用SSH,不使用HTTPS,就解决了问题
- hdu 1290_献给杭电五十周年校庆的礼物
Description 或许你曾经牢骚满腹或许你依然心怀忧伤或许你近在咫尺或许你我天各一方 对于每一个学子母校 永远航行在生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子.我们该送给母校 ...
- Beta冲刺 (4/7)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 共享编辑文章的后端数据处理 展示Gi ...
- Java连接MySQL数据库详细教程(附网盘下载地址)
准备工具 Eclipse-oxygen-64位 http://pan.baidu.com/s/1gf48FIj MySQL-5.7.17 http://pan.baidu.com/s/1skD14Cl ...
- 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language
老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...