jQuery技术

通过jQuery源码学习javascript(一)

字号+ 作者:H5之家 来源:H5之家 2018-01-20 15:00 我要评论( )

通过jQuery源码学习javascript(一),序 最近在做日志统计程序,发现对方的程序是在Jquery基础上进行开发的,而公司的网站的框架是prototype。而且我也早就想了

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

  总结     我也是刚开始研究。可能有些地方说的不是很清楚,如果有人能给我补充,那再好不过了。      时间不早了,下回再接着研究。     序文:通过jQuery源码学习javascript(二)    推荐  

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jquery 表单 清空

    jquery 表单 清空

    2018-01-20 15:00

  • jquery jqPlot API 中文使用教程(非常强大的图表工具)

    jquery jqPlot API 中文使用教程(非常强大的图表工具)

    2018-01-19 08:03

  • jQuery中remove()方法用法实例

    jQuery中remove()方法用法实例

    2018-01-18 15:20

  • JQuery浮动DIV提示信息并自动隐藏的代码

    JQuery浮动DIV提示信息并自动隐藏的代码

    2018-01-17 16:02

网友点评