// 1.创建自运行函数 (function(root) { // 3.在js中作用域是通过function来创建的 // 4.定义类(构造函数),暴露接口,便于调用(创建实例new) var jQuery = function(){ // return new jQuery.prototype.init(); // 桥接模式 return new jQuery.fn.init(); // 8.让fn指向jQuery的原型对象 } // 7.将jQuery当作对象,给对象扩展fn属性,让fn指向jQuery的原型对象 jQuery.fn = jQuery.prototype = { // prototype指向原型对象 init:function(){ // 初始化方法 }, // css:function(){ // 6.在原型对象中添加css()方法 // // // } /** * 10.架构 * 工具函数 * 异步队列 * 浏览器测试 * 数据缓存 * 属性操作 * 事件处理 * 选择器 sizzle * DOM遍历 * DOM操作 * css操作 * 异步请求 ajax * 动画 */ } // jQuery.prototype.init.prototype = Query.prototype; // 5.桥接模式 jQuery.fn.init.prototype = Query.fn; // 9 jQuery.extend = jQuery.fn.extend = function(){ // 11.指向的命名空间相同 var length = arguments.length; // 12.获取传参的个数 var target = arguments[0]||{}; // 13.第一个参数 var i=1; var options; // 17.存放参数(>=2) if(typeof target!=="object"){ // 14.改变参数的引用 target = {}; } // 15.1个参数 if(length==i){ // 当只有一个参数时,改变this的指向 target=this; // 此处this指向jQuery对象本身 // console.log(target); i--; } // 16.2参数 for(;i<length;i++){ // 从1开始 2< if(arguments[i]!==null){ // 遍历将要扩展到本身对象的对象 for(name in options){ // console.log(options); // console.log(options[name]); // target // 指向第一对象(需要扩展的对象) target[name] = options[name]; } } } return target;// 17.设置返回值 } // 18.jQuery静态工具函数扩展 jQuery.extend({ // 19.jQuery本身调用extend()方法 isArray:function() { // body... } }); // 5.将jQuery挂载在window上,作为window的属性 root.$ = root.jQuery = jQuery; })(this); // 2.this指向window对象 作用域(命名空间) 局部作用域/全局作用域 变量通过作用链查找(向上遍历) // 定义在全局作用域中的变量 转换为window的属性 // 定义在全局作用域中的方法 转换为window的function // console.log($==jQuery);