單例模式概念:vue
單例模式,屬於建立類型的一種經常使用的軟件設計模式。經過單例模式的方法建立的類在當前進程中只有一個實例es6
不懂Proxy的能夠先看這兩篇文章面試
MDN設計模式
使用的攔截器: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裏面使用了什麼設計模式,這些模式有什麼特色,怎麼實現
我: 。。。。。