单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现单例核心思想
用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,接下来我们用JavaScript来强行实现这个思路,请看代码:
let createLoginWindow = function(title) {
this.title= title;
}
let proxySingleton = (function() {
var instance;
return function(title) {
if (!instance) {
instance = new createLoginWindow(title);
}
return instance;
}
})();
let windowA = new proxySingleton('login1');
let windowB = new proxySingleton('login2');
console.log(windowA === windowB); // true
可以看到,上述代码中createLoginWindow负责构造对象,然后通过代理proxySingleton来判断是构造新的对象还是返回已有对象。
发布-订阅者模式
数据双向绑定中会用到的一种模式;后续会更新关于Vue 的内容;
function Emitter() {
//订阅者容器,存放订阅者的回调函数
this.dep = [];
// 订阅
this.notice = function (callback) {
this.dep.push(callback)
}
//发布,通知更新
this.emit = function () {
this.dep.forEach((fn) => {
fn();
})
}
}
let e = new Emitter();
e.notice(function () { console.log(123) })
e.notice(function () { console.log(321) })
e.emit();