<body> <script> // vue2 的数据绑定原理: ES5原生语法的 Object.defineProperty var obj = {} Object.defineProperty(obj, "age", { get(){ if(this.tempAge){ return this.tempAge }else{ return 10 } }, set(value){ this.tempAge = value // 在set中数据更新后,调用虚拟DOM更新视图 } }) console.log(1, obj) console.log(2, obj.age) obj.age = 20; console.log(3, obj.age) // vue3 的数据绑定原理: ES6原生语法的 new Proxy() 代理对象 var obj2 = {age: 30, name: '张三'} var proxyObj = new Proxy(obj2, { get(target, prop){ // 参数一是原始对象obj2, 参数二是获取的字段名age console.log(target, prop) // return "myage" return target[prop] }, set(target, prop, value){ target[prop] = value // 在set中数据更新后,调用虚拟DOM更新视图 } }) console.log(4, proxyObj) console.log(4, proxyObj.age, proxyObj.name) proxyObj.age = 40; proxyObj.name = '李四' console.log(5, proxyObj.age, proxyObj.name) </script></body>