jQuery源码学习之二 (部分变量解释说明)

几个变量的相关说明:

1、rootjQuery

后面的代码中可以找到  rootjQuery = jQuery(document);  赋予一个变量后,一是便于压缩;二是语义化后更容易以后的代码中使用理解,可维护性强

2、readyjQuery

3、core_strundefined = typeof undefined

xml中直接判断一个变量是不是等于undefined 在ie9及以下版本中会判断不到,需用typeof判断。所以存储了字符串形式的 “undefined"

   a == undefined;            //xml下 ie中无效
   typeof a == "undefined"    //有效
4、便于压缩
   location = window.location,
   document = window.document,  //document
   docElem = document.documentElement,  //html
5、防冲突函数 noConflict 中使用
   // Map over jQuery in case of overwrite
   _jQuery = window.jQuery,
   // Map over the $ in case of overwrite 
   _$ = window.$,

 防冲突使用示例

   //示例一:
   <script src="jquery-2.0.3.js"></script>
   var $1 = jQuery.noConflict(true);
   var jQuery = 7;

   //若是以上使用方法,jQuery中直接写下面简单的就行了
   (function (window, undefined) {
      var jQuery = function () {
        //...
       };
     jQuery.noConflict = function (deep) {
         return jQuery;
      };
   })(window);



 为了也同时兼容下面这种情况
   //示例二:
   var jQuery = 7;
   <script src="jquery-2.0.3.js"></script>
   var $1 = jQuery.noConflict(true);

   //jQuery中写成这样
   (function (window, undefined) {
      var _jQuery = window.jQuery,
           _$ = window.$,
          jQuery = function () {
            //...
           };
      jQuery.noConflict = function (deep) {
         if (window.$ === jQuery) {
             window.$ = _$;
         };
         if (deep && window.jQuery === jQuery) {
            window.jQuery = _jQuery;
         };
         return jQuery;
      };
      if (typeof window === "object" && typeof window.document === "object") {
         window.jQuery = window.$ = jQuery;
      };
   })(window);


6 、“ ”.trim() 新版本浏览器js自带方法

7、jQuery构造函数的声明

var jQuery = function( selector, context ) 
     //内部返回jQuery.fn.init方法的实例,所以我们调用的时候不用再写new 
     return new jQuery.prototype.init( selector, context, rootjQuery );     
    };
jQuery.prototype.init = function( selector, context, rootjQuery ){   //初始化方法
    //...
    };
jQuery.prototype.css = function( selector, context, rootjQuery ){    //其它实例方法
     //...
    };
//下面代码使挂载到jQuery.prototype的方法同样可以应用于jQuery.prototype.init的实例上
//所以我们调用方法时可以 :$("...").css();
jQuery.prototype.init.prototype = jQuery.prototype;   



相关 jQuery源码:

var
// A central reference to the root jQuery(document)
rootjQuery,

// The deferred used on DOM ready
readyList,

// Support: IE9
// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
core_strundefined = typeof undefined,

// Use the correct document accordingly with window argument (sandbox)
location = window.location,
document = window.document,
docElem = document.documentElement,

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,

// Map over the $ in case of overwrite
_$ = window.$,

// [[Class]] -> type pairs
class2type = {},

// List of deleted data cache ids, so we can reuse them
core_deletedIds = [],

core_version = "2.0.3",

// Save a reference to some core methods
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,

// Define a local copy of jQuery
jQuery = function( selector, context ) {
	// The jQuery object is actually just the init constructor 'enhanced'
	return new jQuery.fn.init( selector, context, rootjQuery );
},

// Used for matching numbers
core_pnum = /[+-]?(?:d*.|)d+(?:[eE][+-]?d+|)/.source,

// Used for splitting on whitespace
core_rnotwhite = /S+/g,

// A simple way to check for HTML strings
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
// Strict HTML recognition (#11290: must start with <)
rquickExpr = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/,

// Match a standalone tag
rsingleTag = /^<(w+)s*/?>(?:</1>|)$/,

// Matches dashed string for camelizing
rmsPrefix = /^-ms-/,
rdashAlpha = /-([da-z])/gi,

// Used by jQuery.camelCase as callback to replace()
fcamelCase = function( all, letter ) {
	return letter.toUpperCase();
},

// The ready event handler and self cleanup method
completed = function() {
	document.removeEventListener( "DOMContentLoaded", completed, false );
	window.removeEventListener( "load", completed, false );
	jQuery.ready();
};

原文地址:https://www.cnblogs.com/hdchangchang/p/3965323.html