利用代理实现单例模式

利用Proxy 实现单例模式

实现

export function singleton(className){
  let instance = null
  return new Proxy(className, {
    construct (target, args) {
      // 内部类
      class ProxyClass {
        constructor () {
          if (instance === null) {
            instance = new target(...args)
          }
          return instance
        }
      }
      return new ProxyClass()
    }
  }) 
}
class Test{
    constructor(){
    }
}

let ProxyedClass = singleton(Test)
let test1 = new ProxyedClass()
let test2 = new ProxyedClass()
// test1 === test2 ---> true

你可能感兴趣的:(utils,前端,javascript)