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


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

复制代码代码如下:


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. 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)

    ===================================================== 最简单的基于libRTMP的示例系列文章列表: 最简单的基于librtmp的示例:接收(RT ...

  2. 【UNIX环境高级编程】文件 IO 操作 一 ( open | close | creat | lseek | write | read )

    博客地址 : http://blog.csdn.net/shulianghan/article/details/46980271 一. 文件打开关闭操作相关函数介绍 1. open 函数 (1) op ...

  3. DAA和CMAC

    数据认证算法(DAA)  Data Authentication Algorithm DAA建立在DES之上,该算法比较陈旧,人们已经发现了这个算法的安全弱点,目前已经被废止. DAA采用DES运算的 ...

  4. 详解EBS接口开发之WIP模块接口

    总体说明 文档目的 本文档针对WIP模块业务功能和接口进行分析和研究,对采用并发请求方式和调用API方式分别进行介绍 内容 WIP模块常用标准表简介 WIP事物处理组成 WIP相关业务流程 WIP相关 ...

  5. HMM:隐马尔科夫模型-前向算法

    http://blog.csdn.net/pipisorry/article/details/50722376 目标-解决HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)(计算 ...

  6. C#attribute-----------初级

    前言: attribute是 .net FrameWork 提出的技术,可以为自己的代码添加注解,从而实现些特殊功能. 一. attribute功能 attribute被译作特性,既然是特性,必然功能 ...

  7. Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线

    Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线 我们在开发中常常会注意到一些Crash,这正是很头疼的,而且Crash会带来很多意想不到的状态,很恶心 ...

  8. Chapter 1 Securing Your Server and Network(12):保护链接服务器

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38438363,专题目录:http://blog.csdn.net/dba_huangzj ...

  9. Libgdx 1.6.0发布,跨平台游戏开发框架

    [1.6.0] -英文原文:http://www.badlogicgames.com/wordpress/?p=3682 -API更改:GlyphLayout xAdvances现在有了额外的开始入口 ...

  10. 【翻译】Ext JS 6有什么新东西?

    工具包ToolKits 发布 包的命名 Fashion 图表 ItemEdit插件 网格 电子表格 可操作模式Actionable Mode和可访问性 LazyItems插件 屏幕阅读器支持可访问性 ...