20 Comments

  1. 写得不错,就是应该说说明下
    var a = {
    json…….
    }
    jQuery.prototype = a
    就可以用JSON的方式给jQuery加函数了
    这个方法个人觉得很不错

  2. Youre so cool! I dont suppose Ive read anything like this before. So nice to search out somebody with some original ideas on this subject. realy thank you for starting this up. this web site is one thing that’s needed on the web, someone with just a little originality. useful job for bringing one thing new to the internet!

  3. var undefined = ‘nodejser’;
    (function(){
    alert(undefined)
    })()
    第二个参数之所以传入undefined并不是为了压缩,而是undefined并不是ECMAScript中的关键字,是可以用作变量名,在IE下,弹出来的是nodejser,而不是undefined。也就是说全局的undefined有可能被覆盖。在ES5之前 undefined都是可写的。在ES5中才规定其为只读。

    至于给的两个思考。性能上我倒没有测试,至少明显的还有一个好处就是可以为一些类数组也能用数组的方法。比较像arguments;
    var slice = [].slice;
    function nicke() {
    return slice.call(arguments,1); //这样的话,arguments这种类数组也能用Array对象中的slice方法。我调用的时候我能返回到从索引大于等于1后面的参数。
    //return arguments.slice(1) //像这种就会出语法错误
    }
    var result = nicke(‘hello’,’nodejser’,’nicke’);

    • 1、关于你说的第一点,undefined是可写的,但是并不意味着它在jQuery这里的实现不是为了压缩,我保持我文章中得观点,参数undefined就是为了最后压缩减少字节数

      2、第二点确实妙!之前没想到的一点
      感谢你提供的想法

  4. 2.4 $.grep的例子里
    $.grep( [0,1,2], function(n,i){
    return n < 0;
    });
    结果应该是[]

    $.grep( [0,1,2], function(n,i){
    return n < 0;
    }, true);
    结果应该是[0,1,2]

    2.10 $.nodeName
    &&的用法 从注释当中可以看出来你把它的用法 理解为||了 导致由此产生对这个方法的错误剖析…
    应该是方法内容代码等同于
    if (elem.nodeName){
    return elem.nodeName.toLowerCase() === name.toLowerCase();
    }else{
    return elem.nodeName;
    }

    最后有一个地方不太明白 就是2.5 $.merge 最后first.length = i有什么作用或者意义?

    • raphealguo

      谢谢指出,其他地方我明天修改一下文章。
      关于你最后一个问题:
      因为first不一定是一个Array类型,jQuery有类数组的概念,也就是自己可以定义length属性,我的理解是:操作[]时并不会自动增加length的值,所以需要最后这次赋值。

  5. I ' won

    jq基本上是提供了一个在游览器环境下dom的兼容处理,便捷的xhr,一些常用的工具函数。少了对架构方向的方法,比如创建类,继承,当然咯。jq的定位,就是为了方便众开发人员,所谓写的少,做的多。如果考虑到架构了,就会增加代码量了,也增加了众开发人员的学习曲线。jq中有很多是切了上下文的,对这个上面确实要好好理解一下。

  6. 冉茂杰

    jQuery 源代码分析完了 能不能 进一步分析一下 jQuery ui 的原理呢
    jQuery ui 插件的原理 看起来还是放在 原型里的
    但是UI 它是动态加载的、抽象出来了一部分通用的模块和功能。
    感觉有点点不好理解

  7. JJ

    //这里相当于 var a = [];a.concat(ret)
    $.map() 方法第33行注释;我试了下好像不行,写法不一样 返回的结果好像也不一样

  8. 匿名

    博主,还有动画效果animate,fadein,fadeout,slidedown,slideup,quene,dequeue
    $.access,data,prop,attr,css这些没讲啊,还有怎么把内部的方法不暴露出来,怎么把方法暴露出来
    博主写的很好很详细,求博主继续分析,让我等屌丝能够学习

  9. 匿名

    if (String.prototype.trim && “\uFEFF\xA0″.trim() !== “”)
    高级的浏览器已经支持原生的String的trim方法,但是jQuery还为了避免它没法解析全角空白,所以加多了一个判断:”\uFEFF\xA0″.trim() !== “”

    应该是if (String.prototype.trim && “\uFEFF\xA0″.trim() === “”)

火晴云 进行回复 取消回复

电子邮件地址不会被公开。


5 + 3 =

您也可以使用微博账号登陆