承接上两篇继续写下去。我尽量把我明白的地方给大家说清楚。有些大家的提问我也有点搞不明白,如果有人能解答,再好不过了
疑问 


  第一篇中有位博友提出了以下的问题,我也不太明白,如果有明白的,能否告知一、二。

复制代码代码如下:


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 源码学习(三)

    jQuery源码分析-03构造jQuery对象-源码结构和核心函数,需要的朋友可以参考下.   作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 毕竟 ...

  3. jquery源码学习(三)—— jquery.prototype主要属性和方法

    上次我们学习了jquery中的主要对象jQuery和一些变量,现在我们开始学习jquery的原型 98行声明了jQuery.fn = jQuery.prototype = {} 285行jQuery. ...

  4. jquery源码学习(一)——jquery结构概述以及如何合适的暴露全局变量

    jQuery 源码学习是对js的能力提升很有帮助的一个方法,废话不说,我们来开始学习啦 我们学习的源码是jquery-2.0.3已经不支持IE6,7,8了,因为可以少学很多hack和兼容的方法. jq ...

  5. jQuery源码学习感想

    还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...

  6. jquery 源码学习(一)

    从上边的注释看,jQuery的源码结构相当清晰.条理,不像代码那般晦涩和让人纠结   1. 总体架构 1.1 自调用匿名函数 self-invoking anonymous function 打开jQ ...

  7. jquery 源码学习(四)构造jQuery对象-工具函数

    jQuery源码分析-03构造jQuery对象-工具函数,需要的朋友可以参考下.   作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 声明:本文为原 ...

  8. 读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一

    背景: 有心学习jquery源码,苦于自己水平有限,若自己研究,耗时耗力,且读懂之日无期. 所以,网上寻找高手的源码分析.再经过自己思考,整理,验证.以求有所收获. 此篇为读高手艾伦<jQuer ...

  9. jquery 源码学习(*)

    最近在做日志统计程序,发现对方的程序是在Jquery基础上进行开发的,而公司的网站的框架是prototype.而且我也早就想了解一下Jquery源码,故决定研究Jquery源码,模拟它的方法   Jq ...

随机推荐

  1. Windows下多线程数据同步互斥的有关知识

     对于操作系统而言,在并行程序设计中难免会遇到数据同步和共享的问题,本文针对这个问题,以windows系统为例回顾一下资源同步的相关问题.要点如下: 1.同步和数据共享  数据征用 2.同步原语 ...

  2. How To: Run Tapestry5 On JBoss 6/7

    Tapestry 5.x cannot find the core pages and components from the URLs provided from classloaders in J ...

  3. UNIX网络编程——心跳包

    所谓的心跳包就是在客户端和服务器端间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 一般是用来判断对方(设备,进程或其它网元)是否正常动行,一般采用定 ...

  4. 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 :  -- AR ...

  5. iOS编程中的音频知识(二):那么多种格式我应该用哪一个?

    iPhone支持不少格式,比如AAC,HE-AAC,AMR,IMA4等等,你可以在以下网址看到比较全的格式和简要介绍: http://www.raywenderlich.com/69365/audio ...

  6. gitlab6 nginx配置和启动脚本

    gitlab6 nginx配置和启动脚本 cheungmine 2013-10 最近把gitlab安装到了ubuntu12.04.3的虚拟机上了.参考: https://github.com/gitl ...

  7. C语言assert的用法

    assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int ...

  8. PKU 3468 A Simple Problem with Integers

    题目大意: 有N,M两个数 Q 表示查询, 后面两个数a b,表示查询从a 到b计算它们的和 C 表示增加   后面三个数a,b,c 表示从a开始,一直到b,每个数都增加c 除了查询要进行输出,增加不 ...

  9. java文件的基本操作示例

    一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{ System.out.println("请输入您的 ...

  10. javascript语法之循环语句小练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...