创建型 - 单例模式
- 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 在JavaScript开发中,对于全局只需要实例出一个的对象,我们的实现往往使用单例。如:登录控制器,购物车,音乐播放器等一个工程需要使用多次的控制器或方法。
function Fn(name) {
this.name = name;
}
Fn.prototype = {
// constructor: "Fn",
say() {
console.log(this.name)
}
}
// 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
let creator = function () {
var obj;
console.log(obj)
return function (name) {
if (!obj) {
obj = new Fn(name);
}
return obj;
}
}()
let tom = new creator('tom');
console.log(tom) // Fn {name: "tom"}
tom.say(); // tom
let jerry = new creator("jerry");
console.log(jerry) // Fn {name: "tom"}
console.log(tom === jerry) // true
jerry.say(); // tom
let singleFn = function(fn) {
let result;
return function(...arg) {
return result || (result = new fn(...arg));
}
};