通过jQuery源码学习javascript(三)


Posted in Javascript onDecember 27, 2012

疑问

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

通过jQuery源码学习javascript(三)

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

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

通过jQuery源码学习javascript(三)

自调用匿名函数(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 );

输出结果

通过jQuery源码学习javascript(三)

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

总结

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

Javascript 相关文章推荐
巧妙破除网页右键禁用的十大绝招
Aug 12 Javascript
javascript 图片上一张下一张链接效果代码
Mar 12 Javascript
JavaScript字符串String和Array操作的有趣方法
Dec 18 Javascript
百度地图api应用标注地理位置信息(js版)
Feb 01 Javascript
gridpanel动态加载数据的实例代码
Jul 18 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
Javascript 浮点运算精度问题分析与解决
Mar 26 Javascript
PHP PDO操作总结
Nov 17 Javascript
js 博客内容进度插件详解
Feb 19 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
JS运算符简单用法示例
Jan 19 Javascript
JS原型对象通俗"唱法"
Dec 27 #Javascript
通过jQuery源码学习javascript(二)
Dec 27 #Javascript
js 判断一个元素是否在页面中存在
Dec 27 #Javascript
通过jQuery源码学习javascript(一)
Dec 27 #Javascript
Eval and new funciton not the same thing
Dec 27 #Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 #Javascript
JS 添加网页桌面快捷方式的代码详细整理
Dec 27 #Javascript
You might like
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
斜45度寻路实现函数
2009/08/20 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python 正则表达式的高级用法
2016/12/04 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python打开文件的方式有哪些
2020/06/29 Python
Python实现一个优先级队列的方法
2020/07/31 Python
序列化Python对象的方法
2020/08/01 Python
python基于win32api实现键盘输入
2020/12/09 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
一个精品风格的世界:Atterley
2019/05/01 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
大学校庆邀请函
2014/01/11 职场文书
高二美术教学反思
2014/01/14 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
应聘护士求职信
2014/07/21 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
环保宣传语大全
2015/07/13 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL