Vue js with语句原理及用法解析


Posted in Javascript onSeptember 03, 2020

vue源码中编译部分有下面一段代码,里面用到了with:

export function generate (
 ast: ASTElement | void,
 options: CompilerOptions
): CodegenResult {
 const state = new CodegenState(options)
 const code = ast ? genElement(ast, state) : '_c("div")'
 return {
  render: `with(this){return $[code]}`,
  staticRenderFns: state.staticRenderFns
 }
}

下面详细解释一下with的用法:

js中我们常用的一种类型是对象:

let obj = {
  a:"aa",
  b:"bb",
  c:"cc"
}

而提到对象,我们要获取它中的属性值,可以使用如下方法:

// 一:
let a = obj.a
//二:
let b = ojb["b"]

取出对象中的每一个属性值,我们都需要obj....,这样无形中会输入很多次obj,那么我们如何简单的获取到它的属性值呢。

1、常规的方法:

var a = obj.a;
var b = obj.b;
var c = obj.c;

2、使用with后的方法:

with(obj){
  var a = a;
  var b = b;
  var c = c;
}

这里with括号中的值就是我们的公共对象,下面就是每个对象中的值

var qs1 = location.search.substring(1);
var hostname1 = location.hostname;
var url1 = location.href;
 
// 上面几行代码都包含了location对象,可使用with语句简写为以下形式
 
with(location){
  var qs2 = search.substring(1);
  var hostname2 = hostname;
  var url2 = href;
}

只要无疑会大大提高我们的效率。

但是凡事都有利弊,我们也不得不提提with的缺点:

由于大量使用with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 继承机制实例
Aug 12 Javascript
JavaScript为对象原型prototype添加属性的两种方式
Aug 01 Javascript
javascript实现des解密加密全过程
Apr 03 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
vue2.0使用swiper组件实现轮播的示例代码
Mar 03 Javascript
JavaScript callback回调函数用法实例分析
May 08 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
使用axios请求接口,几种content-type的区别详解
Oct 29 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 Javascript
Vue通过provide inject实现组件通信
Sep 03 #Javascript
Vue组件通信$attrs、$listeners实现原理解析
Sep 03 #Javascript
Vue父组件监听子组件生命周期
Sep 03 #Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 #Javascript
Vuejs通过拖动改变元素宽度实现自适应
Sep 02 #Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 #Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 #Javascript
You might like
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php include加载文件两种方式效率比较
2010/08/08 PHP
PHP安全配置详细说明
2011/09/26 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
Python实现图像几何变换
2015/07/06 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
《在家里》教后反思
2014/03/01 职场文书
学术会议主持词
2014/03/17 职场文书
产假请假条
2014/04/10 职场文书
计划生育目标责任书
2015/05/09 职场文书
工商行政处罚决定书
2015/06/24 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书