EventBus
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class EventEmitter { constructor () { this.events = this.events || new Map() } addListener (type, fn) { if (!this.events.get(type)) { this.events.set(type, fn) } } emit (type) { let handle = this.events.get(type) handle.apply(this, [...arguments].slice(1)) } }
let emitter = new EventEmitter()
emitter.addListener('ages', age => { console.log(age) })
emitter.emit('ages', 18)
|
双向绑定
核心点就是当数据变化的时候,触发DOM的更新,DOM通过用户操作更新的时候,改变数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| let obj = {} let input = document.getElementById('input') let span = document.getElementById('span')
Object.defineProperty(obj, 'text', { configurable: true, enumerable: true, get() { console.log('获取数据了') }, set(newVal) { console.log('数据更新了') input.value = newVal span.innerHTML = newVal } })
input.addEventListener('keyup', function(e) { obj.text = e.target.value })
|