关于Vue 双向绑定的原理

前几天,阿W在宿舍跟我提到在面试的时候被问到的一个问题,是关于Vue双向绑定的原理的。

当我听到之后,表示一头雾水,于是上网查了一下相关的资料。

其中遇到了一个关键词: Object.defineProperty

其实这个关键词之前我在慕课网上已经遇到过一次,是在讲面向对象时提到的。

var item = 'something';
var obj = {};
Object.defineProperty(obj, 'key', {
    enumerable: true,       // 表示可枚举,即可在for-in 中被枚举出, 默认为true
    configurable: true,     // 表示能否使用delete操作符删除从而重新定义,或能否修改为访问器属性。默认为true;
    get() {
        return item;
    },
    set(newVal) {
        item = newVal;
    }
});
console.log(obj.key);   //something
item = 'nothing';
console.log(obj.key);   //nothing
obj.key = 'anything';
console.log(obj.key);   //anything

在代码中,我们可以发现在给 对象 obj 定义了 get set 方法添加监听属性之后,

不仅可以通过obj.key 修改 obj.key的值 ,还可以通过修改item 来 修改obj.key的值。

猜你喜欢

转载自blog.csdn.net/yang52ya7/article/details/80164492