ES6 Proxy实现单例模式如何实现?

const singletonify = fn => {
  const one = new fn()
  return new Proxy(fn, {
    construct(target, argumentsList, newTarget) {
      return one
    }
  })
}

class A () {}
const SingleA = singletonify(A)

const a1 = new SingleA()
const a2 = new SingleA()
const a3 = new SingleA()

a1 === a2; //true, but why?
a2 === a3; //true

以上这段代码如何实现单例模式?为何每次创建的const one = new fn();都相同?

阅读 2.9k
1 个回答

one被闭包引用了 在内存中一直存在
construct接口拦截了fn的实例化操作 直接返回one 也就是new A();

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题