单例模式概念: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里面使用了什么设计模式,这些模式有什么特色,怎么实现
我: 。。。。。