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知识点收藏
Feb 22 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
JavaScript splice()方法详解
Sep 22 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
Aug 12 Javascript
修改js confirm alert 提示框文字的简单实例
Jun 10 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
Sep 14 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
vue scroller返回页面记住滚动位置的实例代码
Jan 29 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 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
Protoss兵种介绍
2020/03/14 星际争霸
Adodb的十个实例(清晰版)
2006/12/31 PHP
php读取excel文件的简单实例
2013/08/26 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
javascript中this的四种用法
2015/05/11 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
python同步windows和linux文件
2019/08/29 Python
Pytorch to(device)用法
2020/01/08 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
淘宝活动策划方案
2014/02/06 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
员工工作自我评价
2014/09/26 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
工作岗位职责范本
2015/02/15 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS