1. <body>
    2. <script>
    3. // vue2 的数据绑定原理: ES5原生语法的 Object.defineProperty
    4. var obj = {}
    5. Object.defineProperty(obj, "age", {
    6. get(){
    7. if(this.tempAge){
    8. return this.tempAge
    9. }else{
    10. return 10
    11. }
    12. },
    13. set(value){
    14. this.tempAge = value
    15. // 在set中数据更新后,调用虚拟DOM更新视图
    16. }
    17. })
    18. console.log(1, obj)
    19. console.log(2, obj.age)
    20. obj.age = 20;
    21. console.log(3, obj.age)
    22. // vue3 的数据绑定原理: ES6原生语法的 new Proxy() 代理对象
    23. var obj2 = {age: 30, name: '张三'}
    24. var proxyObj = new Proxy(obj2, {
    25. get(target, prop){
    26. // 参数一是原始对象obj2, 参数二是获取的字段名age
    27. console.log(target, prop)
    28. // return "myage"
    29. return target[prop]
    30. },
    31. set(target, prop, value){
    32. target[prop] = value
    33. // 在set中数据更新后,调用虚拟DOM更新视图
    34. }
    35. })
    36. console.log(4, proxyObj)
    37. console.log(4, proxyObj.age, proxyObj.name)
    38. proxyObj.age = 40;
    39. proxyObj.name = '李四'
    40. console.log(5, proxyObj.age, proxyObj.name)
    41. </script>
    42. </body>