核心思想:
限制类实例化次数只能一次,一个类只有一个实例,并提供一个访问它的全局访问点。
实现方式:
使用一个变量存储类实例对象(值初始为 `null/undefined` )。进行类实例化时,判断类实例对象是否存在,存在则返回该实例,不存在则创建类实例后返回。多次调用类生成实例方法,返回同一个实例对象。
代码:
// @Author: lize
const CreateSingle = (Fn) => {
let instance;
return (name) => instance || (instance = new Fn(name)); // eslint-disable-line
};
const Single = (text) => {
const msg = document.createElement('div');
msg.innerHTML = text;
msg.style.display = 'none';
document.body.appendChild(msg);
};
const msgBox = CreateSingle(Single);
document.onclick = () => {
const msgEl = msgBox('这里是弹窗的内容');
msgEl.style.display = 'block';
};
首先用开关来判断 类是否已经实例化,如果已经实例化过了,那么直接关闭开关,不允许再次实例化就可以了.