用代理实现单例模式
通用的单例模式函数:
singleton.js
function singleton(className) {
let ins = null;
const proxy = new Proxy(className, {
construct(target, args) {
if (!ins) {
ins = Reflect.construct(target, args);
}
return ins;
},
});
className.propotype.constructor = proxy;
return proxy;
}
要使用单例模式的类:
my-class-singleton.js
import { singleton } from './singleton.js';
class MyClass{
constructor(){
console.log('My Class')
}
}
const MyClassSingleton = singleton(MyClass);
export default new MyClassSingleton();
在具体的业务客户端使用:
main.js
import myClass from './my-class-singleton.js';
const myClass2 = new myClass();
console.log(myClass === myClass2);
const myClass3 = new myClass.constructor();
console.log(myClass === myClass3);