关于前端:如何让consoleloga-1-a-2-a-3在控制台打印true

27次阅读

共计 446 个字符,预计需要花费 2 分钟才能阅读完成。

最近在学习 vue 数据绑定的原理,vue2.0 版本应用了 Object.defineProperty 办法。对于 Object 类型的数据来说,就是在 getter 中收集依赖,在 setter 中触发依赖。通过 getter 和 setter,咱们能够在读取一个变量或给一个变量赋值时去做一些其余的事件。所以对于题目形容的问题,一个思路就是在 getter 中每获取一次值,就使其加一。

const defineFun = (obj, key, val) => {
    Object.defineProperty(obj, key, {set(newVal) {
            val = newVal
            console.log('set a', val)
        },
        get() {console.log('get a', val)
            return val++ // 返回值 +1
        }
    })
}
defineFun(window, 'a', 1)
console.log(a === 1 && a === 2 && a === 3) // true
a = 51
console.log(a === 51 && a === 52 && a === 53) // true

正文完
 0