Javascript 设计模式笔记
设计模式太多了 还有些模式概念非常接近(比如观察者 中介者 和 事件发布/订阅模式)
构造器模式
var newObject = {}
var newObject = new XXX();
模块模式 (函数包裹 私有变量)
保护私有变量&& 模块引出
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.getPrivateVariable = function () {
// ...
};
return my;
}());
模块引入
(function ($, YAHOO) {
// 当前域有权限访问全局jQuery($)和YAHOO
}(jQuery, YAHOO));
单例模式
var mySingle = (function(){
var instance;
var init = function(){
return {
pubFun: function(){
//...
}
}
};
return {
getInstance: function(){
if(!instance){
instance = init();
}
return instance;
}
}
})();
var A = mySingle.getInstance()
var B = mySingle.getInstance()
A == B //true
事件发布订阅模式
var MyEvent = {
_listener: {},
addEvent:function(type, fn){
if(!this._listener[type]){
this._listener[type] = []
}
this._listener[type].push(fn);
},
fireEvent:function(type, caller){
if(this._listener[type]){
this._listener[type].forEach(function(fn){
fn.call(caller);
});
}
},
removeEvent:function(type, fn){
if(this._listener[type]){
for (var i = 0, len = this._listener[type].length ; i < len; i++) {
this._listener[type].splice(i,1);
};
}
}
};
和观察者模式的区别
Observer模式希望观察者订阅内容改变的事件
而发布订阅模式允许自定义事件, 事件可以传递自定义参数
我理解的是观察者模式notify的时候所有的监听者都会做响应 它只发一种广播
而发布订阅模式发多种事件 对应的事件做响应
原型模式
使用Object.create(yourProtoType) 或者自己指定原型
var car = {
init: function(name){
this.name = name;
},
drive: function(){
console.log(this.name + ' is driving..');
}
}
var yourCar = Object.create(car);
yourCar.init('Honda');
yourCar.drive();
OR
var car = {
init: function(name){
this.name = name;
},
drive: function(){
console.log(this.name + ' is driving..');
}
}
function carFactory(name){
function F(){};
F.prototype = car;
var f = new F();
f.init(name);
return f;
}
var yourCar = carFactory('Honda');
yourCar.drive();
Javascript 设计模式笔记的更多相关文章
- Javascript设计模式笔记
Javascript是越来越厉害了,一统前后端开发.于是最近把设计模式又看了一遍,顺便做了个笔记,以方便自己和他人共同学习. 笔记连载详见:http://www.meteorcn.net/wordpr ...
- 再起航,我的学习笔记之JavaScript设计模式02
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...
- 再起航,我的学习笔记之JavaScript设计模式01
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 在通 ...
- 再起航,我的学习笔记之JavaScript设计模式03
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上一 ...
- 再起航,我的学习笔记之JavaScript设计模式04
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上回 ...
- 再起航,我的学习笔记之JavaScript设计模式05(简单工程模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
- 再起航,我的学习笔记之JavaScript设计模式06(工厂方法模式)
上一次已经给大家介绍了简单工厂模式,相信大家对创建型设计模式有了初步的了解,本次我将给大家介绍的是工厂方法模式. 工厂方法模式 工厂方法模式(Factory Method):通过对产品类的抽象使其创建 ...
- 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- 再起航,我的学习笔记之JavaScript设计模式08(建造者模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
随机推荐
- 学习dijk最短路径中
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #i ...
- Eclipse开发工具学习之道:用Eclipse生成jar文件
很多人都不知道怎么在Eclipse下生成jar文件,或者生成了jar文件后又老是用不了,总是会收到 Exception in thread "main" java.lang.NoC ...
- hadoop笔记之Hive的数据存储(内部表)
Hive的数据存储(内部表) Hive的数据存储(内部表) 基于HDFS 可使用hadoop给我们提供的web管理工具查看数据.打开管理工具localhost:9000–>Utilities下的 ...
- js对JSON数据排序
一.适用于数字排序和字幕排序json 的排序方法有很多种,这是其中最简单的一种方法. 代码如下: var sortBy = function (filed, rev, primer) { rev ...
- the C programming language 阅读笔记2
1. 指针 1.1 自增符的使用 ++*p;//p指向的内容加一 (*p)++; //p指向的内容加一 *p++;//p本身自增 *++p; //p本身自增 因为诸如*和++这样的一元运算符在表达式求 ...
- 用Ultraiso刻录U盘装系统
一.准备工作: 1.一个U盘,也可以是手机或数码相机内存卡通过读卡器与电脑连接: 2.一个系统ISO镜像: 3.刻录软件UltraISO,用单文件绿色版就可以了. 二.开始刻录U盘: 1.启动Ultr ...
- 今天起改用mac的marsedit写博
最近一直使用mac来工作,所以写博也相应改为marsedit. 初步感觉还是不错的,越来越发现mac其实也适合在工作中使用,生活上当然不在话下. 从高富帅的x220t变成屌丝的macbook小白(升级 ...
- poj1563---蜗牛爬井
#include <stdio.h> #include <stdlib.h> int main() { int dayTh; float Udis,currentHeight, ...
- spring bean之间的关系:继承;依赖
概要: ' 继承Bean配置 Spring同意继承bean的配置,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean 子Bean从父Bean中继承配置,包含Bean的属性配置 ...
- 应用程序正常初始化(0xc015002)失败解决方法
VS2005 sidebyside manifest error Microsoft.VC80.MFC Microsoft.VC80.CRT Microsoft.VC80.MFCLOC msvcr80 ...