vue数据劫持代理底层实现原理
程序员文章站
2022-07-02 21:21:06
...
主要利用Object.defineProperty()
// Vue数据劫持代理
// 模拟Vue中data选项
let data = {
username: 'curry',
age: 33
}
// 模拟组件的实例
let _this = {
}
// 利用Object.defineProperty()
for(let item in data){
// console.log(item, data[item]);
Object.defineProperty(_this, item, {
// get:用来获取扩展属性值的, 当获取该属性值的时候调用get方法
get(){
console.log('get()');
return data[item]
},
// set: 监视扩展属性的, 只要已修改就调用
set(newValue){
console.log('set()', newValue);
// _this.username = newValue; 千万不要在set方中修改修改当前扩展属性的值,会出现死循环
data[item] = newValue;
}
})
}
console.log(_this);
// 通过Object.defineProperty的get方法添加的扩展属性不能直接对象.属性修改
_this.username = 'wade';
console.log(_this.username);
上一篇: 使用promise实现异步
下一篇: 使用axios
推荐阅读
-
Mybaits 源码解析 (五)----- 面试源码系列:Mapper接口底层原理(为什么Mapper不用写实现类就能访问到数据库?)
-
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
-
原理解密 → Spring AOP 实现动态数据源(读写分离),底层原理是什么
-
Mybaits 源码解析 (三)----- Mapper接口底层原理(为什么Mapper不用写实现类就能访问到数据库?)
-
Vue 2.0的数据依赖实现原理代码简析
-
浅谈vue中数据双向绑定的实现原理
-
MyBatis Mapper 代理实现数据库调用原理
-
利用Object.defineProperty简单实现vue的数据响应式原理
-
【Vue高级】MVVM实现原理(六)—— 双向数据绑定的实现
-
VUE - vue2.0与vue3.0双向数据绑定的实现原理及区别