一、观察者模式
一对多的一种模式,当分发一个事件时,可以触发多个相关依赖。
二、用观察者模式实现一个简单的vue的bus.$emit/bus.$on
methods: {
test() {
let bus = this.Event()
bus.$on('click0', function(value) {
console.log("我是第一个click0:",value)
})
bus.$on('click0', function(value) {
console.log('我是第二个click0:',value)
})
bus.$on('click1', function(value) {
console.log("click1:",value)
})
bus.$on('click2', function(value) {
console.log("click2:",value)
})
bus.$emit('click0', '我是click0')
bus.$emit('click1', '我是click1')
bus.$emit('click3', '我是没有订阅的click3')
},
Event() {
let $on, $emit, obj={}
$on = (key, fun) => {
let stack, _ref //stack是盒子
stack = (_ref = obj[key]) ? _ref : (obj[key] = [])
return stack.push(fun)
}
$emit = (key, value) => {
let fn, stack, _i, _len, _ref
stack = (_ref = obj[key]) ? _ref : (obj[key] = [])
for (_i = 0, _len = stack.length; _i < _len; _i++) {
fn = stack[_i]
//函数默认return false
if (fn.call(this, value) === false) {
return false
}
}
}
return {
$on: $on,
$emit: $emit
}
},
},
参考资料:
观察者模式和订阅-发布模式的区别:https://juejin.im/post/5a14e9edf265da4312808d86
观察者模式:http://www.alloyteam.com/2012/10/commonly-javascript-design-pattern-observer-mode/

浙公网安备 33010602011771号