Published
Edited
Aug 5, 2020
Insert cell
md`# 单例模式`
Insert cell
md`## 设计模式实现`
Insert cell
md`实例类`
Insert cell
class CreateDiv{
constructor(str){
console.log('constructor str==>',str);
this.name = str;
}
sayName(){
console.log(this.name);
}
}
Insert cell
md`代理实现单例`
Insert cell
// 使用闭包保存变量,用来判断实例是否已经存在
singleProxy = (function(){
let instance;
return function(str){
if(!instance){
instance = new CreateDiv(str);
}
return instance;
}
})();
Insert cell
{
const a = singleProxy('aaa');// {name:'aaa'}
const b = singleProxy('bbb');// {name:'aaa'}
}
Insert cell
md`
## 全部变量表示唯一
Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值
`
Insert cell
{
const FOO_KEY = Symbol.for('foo');
function A() {
this.foo = 'hello';
}
if (!FOO_KEY) {
FOO_KEY = new A();
}
return FOO_KEY;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more