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

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后面加一坨的参数列表,难道看着不眼晕吗?

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

推荐

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

通过jQuery源码学习javascript(三)相关推荐

  1. jquery源码学习笔记三:jQuery工厂剖析

    jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...

  2. jQuery源码学习之Callbacks

    jQuery源码学习之Callbacks jQuery的ajax.deferred通过回调实现异步,其实现核心是Callbacks. 使用方法 使用首先要先新建一个实例对象.创建时可以传入参数flag ...

  3. 基于Qt5.14.2和mingw的Qt源码学习(三) — 元对象系统简介及moc工具是如何保存类属性和方法的

    基于Qt5.14.2和mingw的Qt源码学习(三) - 元对象系统简介及moc工具是如何保存类属性和方法的 一.什么是元对象系统 1.元对象系统目的 2.实现元对象系统的关键 3.元对象系统的其他一 ...

  4. Mybatis源码学习(三)SqlSession详解

    前言 上一章节我们学习了SqlSessionFactory的源码,SqlSessionFactory中的方法都是围绕着SqlSession来的.,那么SqlSession又是什么东东呢?这一章节我们就 ...

  5. jQuery源码学习(1)——addClass

    最近比较闲,寻思着学习下jQuery源码,看了好多博客,很多都讲的比较详细.jQuery虽然只有那么200多K,但内容却比较丰富,对于我这样一个js菜鸟,看起来相当吃力.骨头太大,只能化整为零,从简单 ...

  6. jquery源码学习笔记一:总体结构

    练武不练功,到老一场空.计算机也一样. 计算机的功,就是原理.如果程序员只会使用各种函数,各种框架,而不知其原理,顶多熟练工人而已.知其然,更要知其所以然. jquery我们用得很爽,但它究竟咋实现的 ...

  7. Kubernetes调度器源码学习(三):Preempt抢占机制、调度失败与重试处理

    本文基于Kubernetes v1.22.4版本进行源码学习 5.Preempt抢占机制 当高优先级的Pod没有找到合适的节点时,调度器会尝试抢占低优先级的Pod的节点.抢占过程是将低优先级的Pod从 ...

  8. jQuery源码学习(6)-Sizzle选择器(2)

    1.CSS选择器的位置关系: 四种关系:"+" 紧挨着的兄弟关系:">" 父子关系:" " 祖先关系:"~" 之后 ...

  9. jQuery源码学习(5)-Sizzle选择器(1)

    1.常见的选择器: #test表示id为test的DOM节点 .aaron 表示class为aaron的DOM节点 nav>li 表示在nav内部子li的样式,而不是所有的后代元素,只是往下一层 ...

最新文章

  1. 光电信标灯发光盘的特性电流测试
  2. Linux查看某个端口是否被占用
  3. 【Python】推荐20个好用到爆的Pandas函数方法
  4. 精武风云全线公映,挂马欺诈网站同步上线
  5. 并行程序设计(MPICH环境配置)win10
  6. javascript实例_网页空降与抖动
  7. jQuery选择器的演示
  8. 指针运算不同于算数运算,不能简单加减
  9. 网络创新激活西部科技,戴尔2013软件定义网络圆桌会谈的启示
  10. Dreamweaver/Flash CS4安装后打开时提示此产品的许可已停止工作
  11. CWE-134: Use of Externally-Controlled Format String(使用外部控制的格式字符串)
  12. Ensemble查看基因的外显子信息,并根据染色体位点判断是第几号外显子
  13. php中求解二元一次方程,基于Algebra.js解二元一次方程的实例教程
  14. cpu功耗排行_笔记本低功耗cpu有哪些 低功耗笔记本cpu排行介绍【图文】
  15. Android从程序员到架构师之路3
  16. 基于傅里叶变换的电力测频算法
  17. SQL数据库基本语句
  18. 计算机科学引论2答案,计算机科学引论答案.doc
  19. 被曝欠薪又放长假,600亿科技巨头爆雷了
  20. Round robin

热门文章

  1. ReflectionClass与Closure
  2. 内存查看工具RAMMAP说明
  3. javascript日历插件
  4. 一个html5流星雨源码
  5. [原+转]CSS hack 小技巧 让你的CSS 兼容ff ie6.0 ie7.0
  6. python反编译exe_实战 Python3.7+64位 Exe 反编译
  7. 怎么成为日上会员直邮_18个日上直邮问题汇总,可以参考一下哦
  8. java mysql防重复提交_防止数据重复提交的6种方法(超简单)!
  9. 17 张程序员壁纸(赶快挑一张吧)
  10. MySQL索引和SQL调优手册