Vue3响应式原理与Vue2的对比
// 源数据
let person = {
name: '张三',
age: 18
}
//#region
// 模拟Vue2中实现响应式
// let p = {}
// Object.defineProperties(p, 'name', {
// configurable: true,
// // 有人读取name时调用
// get() {
// return person.name
// },
// // 有人修改name时调用
// set(value) {
// console.log('有人修改了name属性,我发现了,我要去更新界面!');
// person.name = value
// }
// })
// Object.defineProperties(p, 'age', {
// configurable: true,
// // age
// get() {
// return person.age
// },
// // 有人修改name时调用
// set(value) {
// console.log('有人修改了name属性,我发现了,我要去更新界面!');
// person.age = value
// }
// })
//#endregion
//模拟Vue3中实现响应式
// p为person的代理对象
const p = new Proxy(person,{
// 有人读取p的某个属性时调用
get(target,propName){
console.log('有人读取了p身上的'+propName+'属性');
return target[propName]
},
// 有人修改p的某个属性,或给p追加某个属性时调用
set(target,propName,value){
console.log('有人修改了p身上的'+propName+'属性,我要去更新');
target[propName] = value
},
// 有人删除p的某个属性时调用
deleteProperty(target,propName){
console.log('有人删除了p身上的'+propName+'属性,我要去更新');
return delete target[propName]
}
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通