1. function reactive(obj) {
    2. const handler = {
    3. get(target, prop, receiver) {
    4. track(target, prop)
    5. const value = Reflect.get(...arguments)
    6. if (typeof value === 'object') {
    7. return reactive(value)
    8. } else {
    9. return value
    10. }
    11. },
    12. set(target, key, value, receiver) {
    13. trigger(target, key, value)
    14. return Reflect.set(...arguments)
    15. }
    16. }
    17. return new Proxy(obj, handler)
    18. }
    19. function track(data, key) {
    20. console.log('get data ', key)
    21. }
    22. function trigger(data, key, value) {
    23. console.log('set data', key, ":", value)
    24. }
    25. const dinner = {
    26. meal: 'tacos'
    27. }
    28. const proxy = reactive(dinner)
    29. proxy.meal = 'apple'
    30. proxy.list = []
    31. proxy.list.push(1) //响应式