采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
黄神黄神,
$options
render
render.call
vm._renderProxy
因为手写 render 的时候 options.render._withStripped 是 undefined,所以是 hasHandler(看下面的图)。 你试试在 render 函数里加一个 console.log('message1' in this) 就能出报错了
老师是不是可以这么理解, 在template中的render函数 是 anonymous( ) { with(this){return _c('div',{attrs:{"id":"app"}},[_v(_s(mes))])} } 使用了with 触发了 has 方法所以才报错 , 而手写的render函数需要手动触发 has 方法才报错
不是啊,template 编译后的 render._withStripped 为 true,那么它就是 getHandler,它代理的是 get 方法,也就是你访问变量就会触发,而手写 render 的是 hasHandler,它代理的是 has 方法,只有用 in 语法才会触发。
1. 是的2. 在开发环境下,初始化过程会执行 initProxy,其实就是初始化 vm._renderProxy然后可以看它代理的 get 和 has 方法其实就是用于在渲染过程中遇到问题的一些警告。比如这个函数,相信你一定不陌生。
老师,这里我想问一下,如果浏览器不支持proxy,就没有这个警告了吗
应该是的
好的,感谢!
登录后可查看更多问答,登录/注册
全方位讲解 Vue.js 源码,进阶高级工程师
3.0k 4
1.5k 20
1.3k 14
1.2k 12
2.2k 12