美文网首页
JQuery 笔记(二)【21~94】定义变量和函数

JQuery 笔记(二)【21~94】定义变量和函数

作者: 8eeb5fce5842 | 来源:发表于2016-02-17 14:09 被阅读235次

    【21~58】 定义变量和函数(一)

    源码笔记:

    var
        rootjQuery,// JQ的根目录,在866行进行赋值操作rootjQuery = jQuery(document);
        readyList,// 和DOM加载有关
        core_strundefined = typeof undefined,// 得到"undefined"
    
        location = window.location,// 其实不存也可用,但是存了便于压缩成一个字符
        document = window.document,
        docElem = document.documentElement,// 网址信息,document和页面节点的html标签
    
        _jQuery = window.jQuery,// 防冲突的,以防其他库也有$
        _$ = window.$,
    
        class2type = {},// 使用$.type()时要用到的,用于类型判断
        // 最终会存成class2type = { '[Object String]' : 'string' , '[Object Array]' : 'array' }
    
        core_deletedIds = [],// 之前版本里和缓存数据有关
        // 该版本的数据存储改成面向对象的写法了,已经用不上了,只是简单的空数组
    
        core_version = "2.0.3",// 版本
    
        core_concat = core_deletedIds.concat,// 对常用的数组、字符串、对象自变量下的方法进行存储,便于使用和压缩
        core_push = core_deletedIds.push,
        core_slice = core_deletedIds.slice,
        core_indexOf = core_deletedIds.indexOf,
        core_toString = class2type.toString,
        core_hasOwn = class2type.hasOwnProperty,
        core_trim = core_version.trim,// 去字符串前后空格 IE6~8不可用
    

    备注:

    **1.core_strundefined = typeof undefined, **

    window.a == undefined;
    typeof window.a == undefined;//二者功能大致相同。
    //但,IE6~9下前者判断不出XML的方法和属性是否为undefined。后者全兼容。
    

    2._jQuery = window.jQuery, 与 _$ = window.$,

    var $ = 10;
    <script src="jQuery.js"></script>
    // 前面把$另作他用,但当加载了JQ时,会把这个值为10的$赋给_$,避免与JQ的$冲突。
    // 如无另用$,则加载了JQ时,window.$不存在,_$里存的值为undefind。
    // 具体防冲突的方法在349~817。
    

    【21~58】 定义变量和函数(二)

    源码笔记:

    jQuery = function( selector, context ) {// $(),jQuery()调用的都是这个函数
        return new jQuery.fn.init( selector, context, rootjQuery );
    },// 96行 jQuery.fn = jQuery.prototype
    

    备注:

    普通面向对象的写法:

    function Aaa() { }
    
    Aaa.prototype.init = function () {};// 初始化
    Aaa.prototype.css = function () {};
    
    var a1 = new Aaa();// 得用new
    a1.init();//使用时得先调用初始化方法
    a1.css();
    

    JQ的做法:

    function jQuery(){
        return new jQuery.prototype.init();// 返回构造函数
    }
    
    jQuery.prototype.init = function () {};// 初始化
    jQuery.prototype.css = function () {};
    
    jQuery.prototype.init.prototype = jQuery.prototype;// 283行有这句话
    //作用:使二者为引用关系,互影响。没有这句,会找不到jQuery.prototype.css。
    
    jQuery().css();// 不需调用初始化方法,更直观。
    // 使用jQuery()即可,不需用new了
    

    【66~94】 定义变量和函数(三)

    源码笔记:

    core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,//css方法时会用到
    
    core_rnotwhite = /\S+/g,// 用于匹配单词(单词间有空格)
    
    rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,// 匹配<p>aaaa 或 #div1
    
    rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,// 匹配空标签,如<p></p>
    
    // 驼峰转法
    rmsPrefix = /^-ms-/,// ms是IE的前缀,IE是这样的M为大写,如MsMarginLeft,需特殊处理
    rdashAlpha = /-([\da-z])/gi,// 转大小写,带数字的也可转,如-2d --> 2d,把横杆去掉
    
    fcamelCase = function( all, letter ) {// 转驼峰的回调函数
        return letter.toUpperCase();
    },
    
    completed = function() {// document加载成功触发的回调函数
        document.removeEventListener( "DOMContentLoaded", completed, false );
        window.removeEventListener( "load", completed, false );
        jQuery.ready();
    };
    

    备注:

    1.rquickExpr = /^(?:\s(<[\w\W]+>){FNXX==XXFN}|#([\w-]*))$/, **

    rquickExpr = 匹配标签  |  匹配ID
    一些网站如:www.xxx.com/#ID,会通过修改#ID来跳转页面。
    过去黑客会针对这个漏洞来进行XSS(注入木马的方式),通过location的哈希值注入。
    比如修改#ID为#<div>。
    现在这个正则会识别真正的ID而不是带<>的标签,是可以防止注入的。
    

    2.rmsPrefix = /^-ms-/,

    margin-left    -->  js中写magrinLeft
    -webkit-margin-left   -->  js中写webkitMagrinLeft
    但IE是这样
    -ms-margin-left   -->  js中写MsMagrinLeft   首字母是大写
    所以IE要特殊对待一下
    

    相关文章

      网友评论

          本文标题:JQuery 笔记(二)【21~94】定义变量和函数

          本文链接:https://www.haomeiwen.com/subject/iacmkttx.html