Vue 为什么要使用 with 语句?

Vue 在 compile 的时候,会把 template 生成对应的 render function,而这个 render function 通常是长这样的

function render () {
  with (this) {
    return _c('div',{on:{"click":change}},[_c('span',[_v(_s(number))]),_v(" "),_c('span',     [_v(_s(name))])])
  }
}

不是都说不建议用 with 语句吗?那为什么在 Vue 中会使用到?是出于什么目的吗?求dl解惑,感谢~

阅读 5.2k
2 个回答

clipboard.png

大概就是这个意思:vue并没有对模板中的javascript表达式进行ast语法分析,如果要移除with,就需要对javascript表达式进行ast语法分析,并且还需要一个专门的解释器对ast语法树进行解释,这样就会导致存在两个并行的解析器,这样维护成本高,还可能会有潜在的bug风险。所以呢,作者并没有想做这个事情,麻烦费力不讨好

因为这样 你在template中可以不用写this。直接使用当前vue实例中的属性或方法。

多写一个this也是没问题的啊,因为是 with (this) 呀。而不是with另外一个obj.这么处理后只是 可以不写this直接去取属性或方法。但是你写的时候,会从当前函数上下文找this,找不到接着往上找,找到了with (this)这个:画的有点乱,就是这么个意思。
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题