Vue响应式

  • 组件data的数据一旦变化,立刻触发视图的更新
  • 实现数据驱动视图的第一步

  • 核心API - Object.defineProperty

  • Object.definProperty 的缺点(Vue3.0 启用了 Proxy)

Proxy有兼容性问题

  • Proxy兼容性不好,且无法polyfill

Object.defineProperty基本用法

  1. /* 编写 */
  2. let data = {}
  3. let name = "zhangsan"
  4. Object.defineProperty(data, "name" {
  5. get: function() {
  6. console.log('get')
  7. return name
  8. },
  9. set: function() {
  10. console.log('set')
  11. name = newVal
  12. }
  13. })
  14. /* 测试 */
  15. console.log(data.name) // get zhangsan
  16. data.name = "lisi" // set

用 Objec.defineProperty实现响应式

  • 监听对象,监听数组
  • 复杂对象,深度监听
  • 几个缺点