通过jQuery源码学习javascript(三)

承接上两篇继续写下去。我尽量把我明白的地方给大家说清楚。有些大家的提问我也有点搞不明白,如果有人能解答,再好不过了。
疑问
第一篇中有位博友提出了以下的问题,我也不太明白,如果有明白的,能否告知一、二。

                                      

var str = "test";
for(var a in str){console.log(a + ":" + str[ a ]);
}

                                      输出结果

 

这是一个字符串对象,在使用for的时候,会出现上面的情况。

自调用匿名函数(function(){})(window)
(function(window, undefined){// jquery code
})(window);

代码解析:

  第一个括号:创建一个匿名函数。

  第二个括号:立即执行。


 传入window变量原因:
使window变量由全局变量变为局部变量,不需要将作用域链回退到顶层作用域,以便更快的访问window。
在参数列表中增加undefined原因:
在自调用匿名函数的作用域内,确保undefined是真的未定义。
这样设计的好处:
创建私有命名空间。函数体内的变量和方法,不会影响全局空间。不会与其他程序的变量发生冲突。
功能扩展extend()
根据一般的设计习惯,可以直接通过点(.)语法实现,或者在prototype对象结构中增加一个属性即可。——jQuery框架是通过extend()函数来实现功能扩展的。
我们也做个类似的方法。——把指定参数对象包含的所有属性复制给cQuery或cQuery.prototype对象。
(function(){var_cQuery = window.cQuery,cQuery = function(){return new cQuery.fn.init();};cQuery.fn = cQuery.prototype =  {init : function () {return this;}};cQuery.fn.init.prototype =  cQuery.fn;cQuery.extend = cQuery.fn.extend = function( obj ) {for (var prop in obj) {this[ prop ] = obj[ prop ];}   return this;}   cQuery.fn.extend({test : function() {console.log('测试!');}   });window.C = window.cQuery = cQuery;
})();
// 调用方式
C().test();

 

好处:
1、方便用户快速扩展jQuery框架的功能,不会破坏jQuery框架的原型结构。
2、方便管理。
注意:
通过prototype扩展的对象,我们必须通过实例化函数来调用(如cQuery().test(),而不能使用cQuery.test())
对象url参数化param()
(function(){var _cQuery = window.cQuery,cQuery = function(){return new cQuery.fn.init();};  cQuery.fn = cQuery.prototype =  {init : function () {return this; }};cQuery.param = function(obj) {var prefix, s = [];for ( prefix in obj ) {s[ s.length ] = encodeURIComponent( prefix ) + "=" + encodeURIComponent( obj[ prefix ]);}return s.join( "&" );}cQuery.fn.init.prototype =  cQuery.fn;window.C = window.cQuery = cQuery;
})();var param = cQuery.param({"name":"chuanshanjia", "age":30});
console.log( param );

                                     输出结果

对象url参数化:有利于结构化,易于维护。如果在url后面加一坨的参数列表,难道看着不眼晕吗? 

总结
暂时写到这里,如果大家有所补充,那最好不过了。——大家多交流互相学习下。
推荐

 

休闲区
如果大家喜欢这个模块的化,请留言。我统计一下,如果喜欢的人多的话,那我以后会在每篇博文的后面,都会放置这样的模块。——权当休息一下。
【当你学不进去的时候】----普瑞马法则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表之单链表的反转总结

单链表的反转是常见的面试题目。本文总结了2种方法。 1 定义 单链表node的数据结构定义如下: class ListNode {int val;ListNode next;ListNode(int x) {val x;next null;} }2 方法1:就地反转法 2.1 思路 把当前链表的下一个节点pCur插入到头结点dummy…

封神!Win11内置杀软被评为免费最佳

微软 Windows Defender 预装在 Windows 10 和 Windows 11 操作系统上。根据最新报告显示:Windows Defender 是 2021 年最好的防病毒软件(杀毒软件)之一。近日,位于德国的 IT 安全研究机构 AV-TEST 发布了针对 Windows 10 操作系统…

redis协议

为什么80%的码农都做不了架构师?>>> 利用gdb调试redis-server 在客户端redsi-cli,输入 gdb在下面函数处打入断点: 执行read函数后,查看buf中的内容,如下: 可见,客户端发送的指令&am…

佛门重地,不适合搞这种事!!

1 快教教我!▼2 佛门重地,不适合搞这种事(素材来源网络,侵删)▼3 来自中国的圣诞老人(素材来源网络,侵删)▼4 有被内涵到,谢谢▼5 江山代有才人出(素材来…

Git之如何解决sourceTree已经pull全部下来但是本地没有更新的问题

今天用sourceTree好奇怪,我pull下来了同事的代码,但是本地项目没有,如下图 日志上面是显示已提交了同事的代码。 然后下面是本地的UserDao.java文件 死活也找不到 解决方法: 我先是从git 上面clone一份代码下来, 发现这…

WPF关键帧动画

动画与关键帧的区别本章介绍关键帧动画之前, 首先需要讲解一下关于WPF当中基础动画与本章所讲的关键帧动画的区别。视频地址: WPF扩展合集_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili普通动画WPF基础动画当中, 我们熟悉的From/To/By驱动的动画, 主要在两个值之间创建过渡效果, 如下图…

Mac怎么不能拷贝文件到U盘

2019独角兽企业重金招聘Python工程师标准>>> 在日常生活中,我们常常需要把一些文件拷贝的U盘保存。但是一些使用MAC的用户,有时会遇到无法拷贝的情况。今天我们就来给大家介绍介绍MAC怎么不能拷贝文件到U盘,以及面对这种情况我们应…

最漂亮的女生

转载于:https://blog.51cto.com/6254695/1071754

dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)

我们可以把刚才的对容器的所有操作命令都记录到一个文件里,就像写更脚本程序。之后用 docker build 命令以此文件为基础制作一个镜像,并会自动提交到本地仓库。这样的话镜像的构建会变的透明化,对镜像的维护起来也更加简单,只修改…

Android之放大镜实现的两种方式

public class ShaderView extends View {private final Bitmap bitmap;private final ShapeDrawable drawable;// 放大镜的半径private static final int RADIUS 80;// 放大倍数private static final int FACTOR 3;private final Matrix matrix new Matrix();public ShaderV…

他把数学书当小说看,初中没毕业却敢自荐中科大数学研究生,现在天才都这么狂妄了吗?...

全世界只有3.14 % 的人关注了爆炸吧知识他的脑子不太像人脑太聪明了今天,超模君来介绍一位看数学书像看小说一样的天才吧。他是初中没毕业,靠自学8年,便成为文 革后第一个被中科大破格录取的数学研究生。他只坚持做了10年数学研究&#xff0c…

微软RPA工具Power Automate Desktop

什么是RPARPA(机器人流程自动化)系统是一种应用程序,它通过模仿用户在电脑上的操作方法, 实现自动化操作流程,协助人在计算机、手机等计算设备中完成重复的工作流任务。Power Automate Desktop2021年3月2日,Microsoft终于宣布面向…

MS UC 2013-2-Deploy Microsoft Exchange Server 2013-4-Post-Installation Tasks

Blog:http://dynamic.blog.51cto.com MSN:LiuJinFengmsn.com QQ:316190099《MS UC 2013 -系列》博文:1) 以TechNet Library为技术资料原型。2) 以0-《统一沟通-微软-实战》为基础。3) 以1-《统一沟通-微软-技巧》为参照。4&#x…

作为一个程序员,进步完全取决于自己

2015-12-14 我曾经在Hacker News网站上读过一篇帖子的评论,其中一个年轻的程序员说他们不想呆在那些只会让思想陈旧的老程序员离开而不是对他们再次培训的公司里,因为他明白,有一天他们也会这样。 也许这个人的本意是好的,但是他…

如何优雅地向导师/老板表示:“上周工作没什么进展”?

全世界只有3.14 % 的人关注了爆炸吧知识学生时代最怕导师问进度实验数据有了吗?结论有了吗?社畜时最怕老板问进度客户签合同了吗方案改出来了吗重点从来都不是被问,而是没什么进展还要硬着头皮汇报应对这种情况小编总结了三句口诀:反客为主&…

Android之如果解决Android studio项目里面的类名不能重命名

问题:改类名修改不了 今天师傅要我给那个在activity里面不规范的类名,类名是SearchUser.改成SearchUserActivity,发现改不了出了一下问题,如下图 如何解决的: 点击下面的(85:56)行&#xff0c…

python葡萄酒数据集_利用python分析红葡萄酒数据

在本次分析中,我使用了随机森林回归,并涉及数据标准化和超参数调优。在这里,我使用随机森林分类器,对好酒和不太好的酒进行二元分类。首先导入数据包:importnumpy as npimportpandas as pdimportmatplotlib.pyplot as …

Codeforces 365C - Matrix(hash + yy)

题意:给定你一个数串s,再给你一个 a ,问你在矩阵d(第i,j个元素为si*sj)有多少个小矩形的和为a 解题思路:可知 a (s[x] s[x1] ....s[y])* (s[p]s[p1]....s[q]); 我们只需要枚举各字串的和…

耗时3年,集齐102位中国摄影师,央视这部纪录片BBC也无法超越......

全世界只有3.14 % 的人关注了爆炸吧知识地球上已知的植物有三十多万种,其中十分之一生长在中国。这些植物不仅为中国带来福祉,还不断迁徙到世界各地。在人类的不懈努力下,它们又获得了新的姿态,为不同的文明带来不一样的色彩。《影…

十五天精通WCF——第十一天 如何对wcf进行全程监控

说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做“生命周期”,我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如记录日志,参数过滤,全局登录验证等…