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 从if else 到 switch case 再到抽象
Jul 17 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
深入分析下javascript中的[]()+!
Jul 07 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
JavaScript数组的5种迭代方法
Sep 29 Javascript
浅谈React组件之性能优化
Mar 02 Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
又一个php 分页类实现代码
2009/12/03 PHP
php笔记之常用文件操作
2010/10/12 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
详解Python locals()的陷阱
2019/03/26 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
php实例化对象的实例方法
2021/11/17 PHP
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis