zoukankan      html  css  js  c++  java
  • JQ深度手记、源码分析

    1、$.extend() 对象继承操作、浅拷贝操作、深拷贝操作(第一个参数:true)

    var a  = {
        name:'lisan'
    };
    
    var b = {};
    
    $.extend(b, a);   //b浅拷贝a的行为、属性 ,拷贝是另外创建一个空间,这个空间存放拷贝到的行为、属性
    b.name = 'lili';
    console.log(a.name);  //'lisan' 不会被影响   
    
    a  = {
        name:{age: 30}
    };
    
    var b = {};
    $.extend(true, b, a); //b深拷贝a
    $.extend() 拷贝

    2、$.proxy

    3、异步调试 主页面js头尾部加 @ sourceURL=你要调试的异步js

    4、jq复制、剪切、粘贴事件(cut、copy、paste)

    5、源码分析

    1. 总体架构
    
    1.1 自调用匿名函数 【self-invoking anonymous function】
        打开jQuery源码,首先你会看到这样的代码结构:
        (function( window, undefined ) {
            // jquery code
        })(window);
        1.这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行
        2.为什么要创建这样一个“自调用匿名函数”呢?
            通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。
        3.匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有很多种写法(注意中文的右括号,这里列出2种常见的写法):
            (function() {
                console.info( this );
                console.info( arguments );
            }( window )) ;
            (function() {
                console.info( this );
                console.info( arguments );
            })( window );
        4.为什么要传入window呢?
            通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:
            (function(a,b){})(window); // window 被优化为 a   
        5.为什么要在在参数列表中增加undefined呢?
            在自调用匿名函数的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值。
            undefined = "now it's defined";
            alert( undefined );
            浏览器测试结果:
    
            结论
            ie ==> now it's defined 可以改变
            firefox => undefined 不能改变
            chrome => now it's defined 可以改变
            opera => now it's defined 可以改变
        6.注意到源码最后的分号了吗?
            分号是可选的,但省略分号并不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号并养成习惯。
    1.2总体架构
        接下来看看在 自调用匿名函数 中都实现了什么功能,按照代码顺序排列:
        (function( window, undefined ) {
            // 构造jQuery对象,JQuery采用js单例模式模式创建唯一的对象。
            var jQuery = function( selector, context ) {
                return new jQuery.fn.init( selector, context, rootjQuery );
            }
            // 工具函数 Utilities
            // 异步队列 Deferred
            // 浏览器检测 Support
            // 数据缓存 Data
            // 队列 queue
            // 属性操作 Attribute
            // 事件处理 Event
            // 选择器 Sizzle
            // DOM遍历
            // DOM操作
            // CSS操作
            // 异步请求 Ajax
            // 动画 FX
            // 坐标和大小
            window.jQuery = window.$ = jQuery; 【注册$/jquery到window,即全局作用域】
        })(window);
        
    从上边的注释看,jQuery的源码结构相当清晰、条理,不像代码那般晦涩和让人纠结。
    后边的手记基本将以这个顺序展开。
    JQ源码分析感受——总体架构
  • 相关阅读:
    linux IPtable防火墙 禁止和开放端口
    Forward链、Input链和Output链的区别
    linux下导入、导出mysql数据库命令
    linux 环境下tomcat中部署jfinal项目
    android 调用系统界面
    效果超赞的基于js的chat组件和图形动画组件
    《Tsinghua oc mooc》第5~7讲 物理内存管理
    《Tsinghua os mooc》第1~4讲 启动、中断、异常和系统调用
    《MIT 6.828 Homework 2: Shell》解题报告
    《xv6 Appendices: PC Hardware and Boot loader》学习笔记
  • 原文地址:https://www.cnblogs.com/codc-5117/p/6720577.html
Copyright © 2011-2022 走看看