Proxy代理實現單例模式

單例模式概念:vue

單例模式,屬於建立類型的一種經常使用的軟件設計模式。經過單例模式的方法建立的類在當前進程中只有一個實例es6

不懂Proxy的能夠先看這兩篇文章面試

MDN設計模式

阮一峯老師出的es6函數

使用的攔截器:construct(target, args):攔截 Proxy 實例做爲構造函數調用的操做ui

construct方法用於攔截new命令spa

construct方法返回的必須是一個對象,不然會報錯。設計

好了廢話很少說,下面直接上代碼(你的時間不寶貴,個人時間還寶貴了)代理

function singletonProxy (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 A {
  constructor () {
  
  }
  run () {
    console.log(1)
  }
}
// 代理A類實現單例模式
let AP = singletonProxy(A)
let ap1 = new AP()
let ap2 = new AP()
// ap1 === ap2 >>> true
複製代碼

掘金其餘技術人員的實現模式,我以爲奇怪的是竟然沒有人發現,難道大家都不重視設計模式

不懂設計模式面試的時候code

面試官:會使用vue嗎

我:會

面試官:知道vue的源碼怎麼實現的嗎

我:知道

我:使用 Object.defineProperty() 方法,而後吧唧吧唧一大堆

面試官:停,vue裏面使用了什麼設計模式,這些模式有什麼特色,怎麼實現

我: 。。。。。

相關文章
相關標籤/搜索