啃jQuery源码,记录所思所想
2017-12-31 17:15
337 查看
2017/12/31 纪念今天是我们90后最后一次的18岁
研读的源码地址:https://github.com/hoyinWong/jquery-1/blob/master/src/data.js
&&-发现一个看得懂但是不明白为何这样写的正则,希望有缘人能告知:
既然rbrace在括号中用?:是不希望捕获子模式,那为何不直接写成这样,通过测试,两者处理的结果是一样的:
so,若能有网友告知,不胜感激。
&&-看了源码才知道为什么设定元素data-属性值(data-attribute)时,建议不要大写,因为jQuery会将大写的做如下转换,驼峰反转:
看完源码后,终于明白在实际项目中你为什么这样操作会拿不到值了:
$(elem).data(‘myTestHH’);
2018/01/01 新的一年,hoyin你好,愿每一天都在进步,都有学习
在研究jQuery.extend(A,B)浅复制和深复制的区别,发现一篇不错的文章,值得学习:
jQuery.extend()浅深复制
知乎上关于浅深复制的区别
浅复制:A对象拷贝B对象的所有字段,如果字段是内存地址,则拷贝地址,如果字段是基元类型,则只是单纯的复制值,从中可以看出浅复制的缺点是如果改变B字段所指向的内存地址,那A也会受到影响。浅复制的实现原理如下:
深复制:这种方式会完全拷贝所有数据,优点是B与A不会相互依赖(A,B完全脱离关联), 缺点是拷贝的速度更慢,代价更大。
研读的源码地址:https://github.com/hoyinWong/jquery-1/blob/master/src/data.js
&&-发现一个看得懂但是不明白为何这样写的正则,希望有缘人能告知:
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/; function getData( data ) { // rbrace正则的作用是test data是不是json字符串 if ( rbrace.test( data ) ) { return JSON.parse( data ); } }
既然rbrace在括号中用?:是不希望捕获子模式,那为何不直接写成这样,通过测试,两者处理的结果是一样的:
var rbrace = /^\{[\w\W]*\}|\[[\w\W]*\]$/;
so,若能有网友告知,不胜感激。
&&-看了源码才知道为什么设定元素data-属性值(data-attribute)时,建议不要大写,因为jQuery会将大写的做如下转换,驼峰反转:
var rmultiDash = /[A-Z]/g; function dataAttr( elem, key, data ) { var name; // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { //$&:是与 regexp 相匹配的子串,所以这里会将大写的字一个个替换成-大写字符,比如key=myTestHH,执行key=key.replace( rmultiDash, "-$&" )会变成:key=my-Test-H-H,然后toLowerCase()后变为my-test-h-h; name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); } }
看完源码后,终于明白在实际项目中你为什么这样操作会拿不到值了:
$(elem).data(‘myTestHH’);
2018/01/01 新的一年,hoyin你好,愿每一天都在进步,都有学习
在研究jQuery.extend(A,B)浅复制和深复制的区别,发现一篇不错的文章,值得学习:
jQuery.extend()浅深复制
知乎上关于浅深复制的区别
浅复制:A对象拷贝B对象的所有字段,如果字段是内存地址,则拷贝地址,如果字段是基元类型,则只是单纯的复制值,从中可以看出浅复制的缺点是如果改变B字段所指向的内存地址,那A也会受到影响。浅复制的实现原理如下:
var obj = { a:1, arr: [2,3] }; var shallowObj = shallowCopy(obj); function shallowCopy(src) { var dst = {}; for (var prop in src) { //单纯的把obj的字段都拷贝到shallowObj,不涉及到递归。 if (src.hasOwnProperty(prop)) { dst[prop] = src[prop]; } } return dst; }
深复制:这种方式会完全拷贝所有数据,优点是B与A不会相互依赖(A,B完全脱离关联), 缺点是拷贝的速度更慢,代价更大。
相关文章推荐
- 所思所想 虚构应用场景--和一个小弟的聊天记录
- 分析jQuery源码时记录的一点感悟
- js便签笔记(9)——解读jquery源码时记录的一些知识点
- jQuery源码学习记录(1)基本结构和选择器
- 解读jquery源码时记录的一些知识点
- jquery源码学习记录(1)
- jQuery源码分析系列 学习记录
- JQuery自适应窗口大小导航菜单附源码下载
- jQuery源码学习笔记(05)
- 转 JQuery FlexiGrid的asp.net完美解决方案:dotNetFlexGrid 源码、文档、范例程序下载。
- jquery 源码阅读笔记 大杂烩
- 记录jQuery的一些用法
- 从 svn 服务器下载最新源码并且记录下对应 revision 号的 cmd 脚本
- Android 4.4 源码编译记录
- jquery源码阅读知识储备(5)call方法和apply方法接触
- jQuery源码分析之prop和removeProp方法
- jQuery 2.0.3 源码分析Sizzle引擎解析原理
- jQuery源码学习——event.special用于执行异步任务的实践
- 源码记录一:activity与application,service,reciever中的context启动activity为什么不一样。