jQuery1.0源代码分析之jQuery构造函数(二)

来源:未知 责任编辑:智问网络 发表时间:2013-09-26 23:49 点击:

 

我们接着上一篇jQuery源代码分析(一),继续看后面的代码。

 

 

jQuery的框架设计是很巧妙的,可能1.0和1.6.x的代码变化很大,但是基本原理是一样的,都是用javascript的prototype来实现继承,我们看下面的代码:

 

 

function jQuery(a,c) { 

 

    // 代码段1:这里省略若干代码行 

     

    // If the context is global, return a new object 

    if ( window == this ) 

        return new jQuery(a,c); 

 

    // 代码段2:这里省略若干代码行 

     

 

这里,我们省略掉了一些不重要的代码,函数jQuery就是入口函数。

大家知道,javascript的function即是函数又是类,当你new一个函数的时候,这个函数就变成了类的构造函数,函数内的this指向被new出来的实例。

 

而正常调用一个全局的函数,this是指向window变量的。

 

 

所以上面的代码就不难理解了。

 

第一次调用jQuery函数的时候,jQuery充当一个对象工厂,当遇到if (window == this) 马上new一个jQuery对象,再次调用jQuery,并把该对象返回。

 

第二次调用jQuery函数的时候,jQuery充当了构造函数,this指向了new出来的实例。

 

代码本身没什么问题,但是设计的有点不好,在代码段1的位置里,两次调用jQuery函数,this被分别指向了window和jQuery实例对象,这就有点不好了。所以代码段1里没有没有使用this,而代码段2里才使用this。

 

 

本着单一责任原则,一个函数应该只做一件事。所以后来版本的jQuery就把new对象这段代码,放到一个新的函数init里面去了。

 



作者 baozhifei
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Gb2312转utf-8编码的方法(vbs+js)
    • 如何使用Ajax技术开发Web应用程序(1)
    • js跳转路径问题
    • JavaScript模仿桌面窗口
    • 用js检测两个线段是否相交
    • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
    • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
    • 我是如何去了解jquery的(六),案例之幻灯片轮换
    • Jquery封装幻灯片效果
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1