工作生活

vue 数据绑定

2019-07-01  本文已影响0人  zzz1t1

https://www.cnblogs.com/libo0125ok/p/8038073.html


    let data = {price: 5, count: 10, res: 50}
    let target = null
    class Observer {
        constructor () {
            this.array = []
        }
        subscribe() {
            if( target && !this.array.includes(target)) {
                this.array.push(target)
            }
        }
        notify() {
            this.array.forEach(sub => sub())
        }
    }

    Object.keys(data).forEach(key => {
        let internalValue = data[key]
        const obs = new Observer()
        Object.defineProperty(data, key, {
            get() {
                obs.subscribe()
                console.log('get:' +internalValue)
                return internalValue
            },
            set(val) {
                internalValue = val
                console.log('set:'+ val)
                obs.notify()
            }
        })
    });

    
    function watcher(func) {
        target = func
        target()
        target = null
    }

    watcher(() => {
        data.res = data.price * data.count
    })

上一篇下一篇

猜你喜欢

热点阅读