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 相关文章推荐
jQuery操作input type=radio的实现代码
Jun 14 Javascript
JavaScript splice()方法详解
Sep 22 Javascript
jquery判断浏览器后退时候弹出消息的方法
Aug 11 Javascript
jquery操作对象数组元素方法详解
Nov 26 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
Apr 26 Javascript
vue基础之事件v-onclick="函数"用法示例
Mar 11 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
详解Vue串联过滤器的使用场景
Apr 30 Javascript
详解JavaScript数据类型和判断方法
Sep 04 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 adodb连接不同数据库
2009/03/19 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
前端构建工具之gulp的语法教程
2017/06/12 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
js实现录音上传功能
2019/11/22 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
简单了解python模块概念
2018/01/11 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
基于python使用tibco ems代码实例
2019/12/20 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
Python实现区域填充的示例代码
2021/02/03 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
医疗纠纷协议书
2014/04/16 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
和谐社区口号
2014/06/19 职场文书
初中学习计划书范文
2014/09/15 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android