作家
登录

通过jQuery源码学习javascript(一)

作者: 来源:www.28hudong.com 2013-03-30 00:15:39 阅读 我要评论

Jquery这么普及,必有它过人之处,通过开源代码进行学习,是个不错的学习方法啊! 以下是我模拟的方法,我尽量简化方法。 定义对象C(类似于jquery的$方法)——这个也是jquery设计非常巧妙的地方 复制代码 代码如下: (function(){ var _cQuery = window.cQuery, cQuery = function(){ return new cQuery.fn.init(); }; cQuery.fn = cQuery.prototype = { init : function () {          console.log(this); return this; }, test : function () { console.log('test'); } }; cQuery.fn.init.prototype = cQuery.fn; window.C = window.cQuery = cQuery; })(); C().test(); 输出结果 代码分析 1、把cQuery注册到window属性中,当成全局变量使用。用C做为简易名称。 window.C = window.cQuery = cQuery; 2、 cQuery.fn.init.prototype = cQuery.fn;   拿图说话(打印当前对象cQuery): 去掉该句截图。   填上此句截图: 难点分析:原型传递   init的原型只是当前的函数。    用cQuery.fn.init.prototype = cQuery.fn;覆盖init构造器的原型对象,从而实现跨域访问。 评估:   这是一招妙棋,new cQuery.fn.init()创建的新对象拥有init构造器的prototype原型对象的方法,通过改变prototype指针的指向,使其指向cQuery类的prototype。——这样创建出来的对象就继承了cQuery.fn原型对象定义的方法。   3、用一个var定义变量,函数。Jquery源码里用了79行定义了一连串的变量(在开头部分)。 each方法 复制代码 代码如下: (function(){ var _cQuery = window.cQuery, cQuery = function(){ return new cQuery.fn.init(); }; cQuery.fn = cQuery.prototype = { init : function () { return this; }, each : function(obj, callback) { // each 方法 var name, length = obj.length; for (name in obj) { if (callback.call(obj[name], name, obj[name]) === false) { break; } } }, isWindow : function(obj) { return obj != null && obj == obj.window; } }; cQuery.fn.init.prototype = cQuery.fn; window.C = window.cQuery =cQuery; })(); C().each({ Height : 'height', Width : 'width'}, function(name, type){ console.log(this, name, type); }); 输出结果 难点分析:callback.call(obj[name], name, obj[name]) callback是function(name, type){ console.log(this, name,type);}这个方法 第一个obj[name]是"height“或"width"字符串,是callback函数里的this。 name,第二个obj[name]是传给callback的参数。 isWindow()方法 在上面代码的基础上,进行编写: 复制代码 代码如下: isWindow : function(obj) { return obj != null && obj == obj.window; } 调用: 复制代码 代码如下: console.log(cquery.isWindow(window)); console.log(cquery.isWindow(document)); 输出结果 window对象有一个特殊的属性window,等价于 self 属性,它包含了对窗口自身的引用。通过这个属性判断是否是window对象! 总结   我也是刚开始研究。可能有些地方说的不是很清楚,如果有人能给我补充,那再好不过了。   时间不早了,下回再接着研究。

  推荐阅读

  Js数组的操作push,pop,shift,unshift等方法详细介绍

js中针对数组操作的方法还是比较多的,今天突然想到来总结一下,也算是温故而知新吧。不过不会针对每个方法进行讲解,我只是选择其中的一些来讲。 首先来讲一下push和pop方法,这两个方法只会对数组从尾部进行压入>>>详细阅读


本文标题:通过jQuery源码学习javascript(一)

地址:http://www.17bianji.com/kaifa2/JS/22666.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)