• jquery 源码分析五


    突然发现接下来马上就是Sizzle的核心代码了,这次就简单分析下Sizzle前面的剩下的代码。这次的篇幅会很短,因为剩下的代码就两段了,就当为Sizzle分析蓄力吧~

    话说,尝试着把博客变成响应式布局了(简单粗略版),不知道有没有人发现~

    首先是class2type,class2type中保存了一下[object name]-name的键值对,就是为了在判断类型的时候使用。这里使用了each函数来对字符串split后形成的array进行循环添加到class2type中。看代码:

    jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
        class2type[ "[object " + name + "]" ] = name.toLowerCase();
    });

    这样,在toString()方法调用后返回的值可以直接使用class2type来返回正确的类型了。

    第二段函数是isArraylike,这个是用来判断某个对象是否像数组,就是有length,同时从0到length-1都是有对应的值得,这样就可以认为这个对象像一个数组了。同时,默认nodeList是像数组的,代码如下:

    function isArraylike( obj ) {
        var length = obj.length,
            type = jQuery.type( obj );
            
            // 若为函数,或者是window,那么直接返回false
        if ( type === "function" || jQuery.isWindow( obj ) ) {
            return false;
        }
    
            // 若nodeType == document.ELEMENT_NODE并且有length,就认为是像array
        if ( obj.nodeType === 1 && length ) {
            return true;
        }
    
           // 有length,并且length的最后一项存在obj中
        return type === "array" || length === 0 ||
            typeof length === "number" && length > 0 && ( length - 1 ) in obj;
    }

    这样就可以用来判断是否是像array了。

    ====================================================================

    前面几篇有一点没有注意的地方,就是extend到jQuery和jQuery.prototype上的函数作用是不同的。

    extend到jQuery上的函数是通过$.method()方式调用的,比如$.dir()。而extend到jQuery.prototype上的话,就是通过$().method()来调用的,比如:$().find()

  • 相关阅读:
    生产者消费者问题--进阶
    互斥量和信号量的区别
    linux多线程大神博客网址
    生产者消费者
    文件互斥
    Linux中link,unlink,close,fclose详解
    条件变量
    哲学家进餐问题-3中解决方案
    使用读写锁解决读者-写者问题
    架构漫谈(三):如何做好架构之识别问题
  • 原文地址:https://www.cnblogs.com/cyITtech/p/3588790.html
Copyright © 2020-2023  润新知