前几天,阿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的值。