依赖收集问题

来源:4-5 依赖收集(上)

慕盖茨7486032

2021-07-15

{{ msg }}

msg: { play: { name: '123' }, hello: 'hellowold' } 老师,我直接在模板上输出msg对象,在依赖收集过程中, 为何会将msg的子元素也收集呢,在代码中也没看到相应的模块,
写回答

1回答

ustbhuangyi

2021-07-15

因为插值最终编译会调用 _s 方法,比如模板:

<div id="app">{{ msg }}</div>

编译后会生成 render 函数

function render() {

  with(this) {

    return _c('div', {

      attrs: {

        "id": "app"

      }

    }, [_v(_s(msg))])

  }

}

这个 _s 方法在源码内部是 toString 方法

//img.mukewang.com/szimg/60ef95a20972609408600072.jpg

toString 定义如下

//img.mukewang.com/szimg/60ef962409d0349222540656.jpg

如果 val 是一个对象,那么会执行 JSON.stringify,所以子元素也被访问到了,触发了依赖收集


0
0

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程