通用的单例模式
使用闭包保存一个变量,如果该变量存在则返回该对象,否则调用函数返回一个对象并赋值到该对象上
/**
*
* @param {Function} fn 返回某一个对象的函数,不使用new来获取对象
* @returns
*/
const getSingle = function (fn) {
let instance;
return function () {
return instance || (instance = fn.apply(this, arguments));
};
};
const createSun = function (radius) {
const obj = {};
obj.id = Math.floor(Math.random() * 100 + 1);
obj.radius = radius;
return obj;
};
const createSingleSun = getSingle(createSun);
const sun1 = createSingleSun(10000);
const sun2 = createSingleSun(10000);
console.log(sun1 === sun2);//true