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

2016-02-17  本文已影响235人  8eeb5fce5842

【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要特殊对待一下
上一篇 下一篇

猜你喜欢

热点阅读