单例是一个代码优美的利器,更优美的惰性单例(哈哈哈哈哈!)
单例
- 单例顾名思义就是在整个程序中存在唯一的实例或者对象
- 单例可以有两种实现一种是运行时、一种是程序加载及创建,具体看业务场景
假设我需要一个Store类,全局需要共享一个实例,否则会出现问题,上面会陆续动态修改属性值
饿汉式
// 单例
// store.js
export const Store = function() {}
// 在使用之前就已经构建
// 命名结尾标注Single
export const storeSingle = new Store()
// foo.js
import { storeSingle } from 'store.js'
// bar.js
import { storeSingle } from 'store.js'
懒汉式
// 单例
// 我实现代码会摒弃到this,函数有函数作用域
const getSingle = (fn) => {
let result = null
return (...args) => {
return result || (result = fn.call(null, ...args))
}
}
// store.js
import { getSingle } from '@/utils/getSingle.js'
export const Store = function() {}
export const genStore = (//options) => new Store()
// 命名结尾标注Single
export const getStoreSingle = getSingle(getStore)
// foo.js
import { getStoreSingle } from 'animal.js'
// bar.js
import { getStoreSingle } from 'animal.js'