Skip to content

YanZiSen/learn-jQuery-sourceCode-node

Repository files navigation

  • jquery 构造器中传入window对象的原因 不用退回顶级作用域 更快访问window对象 代码压缩;
  • 自执行函数防止全局污染 不与其他库冲突;
  • 传入undefined是为了防止undefined被改变,外界修改undefined的值;
  • 不要省略自执行函数在开头与结尾的分号;防止前面或者后面的未知作为函数调用而报错;
  • jquery后面构造函数中的new 为了不让jQuery前面有new并且还要有继承 所以return后面加了new 函数的执行结果是一个对象,侧面曲折实现链式调用;
  • jQuery.fn就是jQuery.prototype 为了省略字符;
  function JQuery(){
    return new Jquery.prototype.init();
  }
  Jquery.prototype.init=function(){};
  jQuery.prototype.css=functioin(){};
  Jquery.prototype.init.prototype=jquery.prototype;//省略new的方式
  对象字面量的方式重写原型后如果需要用到constauctor需要手动修复constructor,否则为Object;
  • XSS攻击??;
  • rootjQuery = jQuery(document);为了更好进行压缩;
  • var a=a+10//不好维护 var speed=10;a+speed;
  • 老版本的IE判断undefined用typeof obj.attr=='undefined';
  • _jquery和_s是实现防止冲突的作用 定义在开头 不冲突是undefined等于做了标记;
  • class2type 类型判断;
    Object.prototype.tostring.call() [object A*]比较靠谱 class2type属性挂载
    type:function(obj){
      if(obj==null){
        return  String(obj);
      }
      return (typeof obj=='function'||typeof obj=='object')?
              class2type[{}.tostring.call(obj)]||'object':
                  typeof obj;
    }
  • 伪数组jquery实现循环的方式; 加上了length
  • $().css();实例方法; $.trim();工具方法;
    • jquery工具方法 $.merge();合并数组 类数组;
    • jquery.makeArray();//两餐与一餐 第二个参数有length转为对象 没有转为数组;
    • jqeury实例方法;
      • .pushStack(elem) .end() 将elem用merge变为jQuery对象 然后用preJQuery指向this end指回栈底下的元素 .first() .last() .eq() 前两个调用的第三个方法 第三个调用了pushStack方法 .map .each
  • jquery中使用的是拷贝继承 其他还有类式继承(new+Function) 原型继承;

  • jquery继承方法 (方法写在函数后面则指的是函数的静态方法);285~347

    • $.extend() 的三种用法 $.extend({}) $.fn.extend({})
    • $.extend({},{},{},{}) 将后面的对象合并到前一个上
    • $.extend(true,{},{}) 深考备
    • 如果length=i 那么扩展到原型上 为原型实时拷贝复制;
  • $.globleEval()将变量转为全局的

  • window.eval与eval的区别 能否转为全局变量;

  • push可以压入数组但是并不会将数组打散 应用apply可以; !!两个为的是将undefined转为FALSE;

  • .grep()过滤反转设计的巧妙;

  • .swap()怎样获得display为none的元素的宽度(在none时无法获得,但是不是时可以,转成不是时又要不影响页面元素,所以position+visible);

  • .proxy()的绑定参数传入合并真的秒啊;

  • ready()的实现

  • window.onload是要等所有的元素都加载完 而document.DOMcontentloaded是不包含图片flash的 较早触发;

if(document.readyState==='complete'){
  setTimeout(fn);//IE hack写法 IE在没加载完时就会触发
}

document.addEventListener() window.addEventListener() 哪一个快哪一个加载 为的是有的浏览器有缓存

  • undefined和null没有对应的包装对象;使用!!的意义

  • 由于for in会遍历整个原型链 所以继承层次太深的话会影响性能;

  • .noop空函数的作用;

  • $('

  • ',{html:,attr:,}) 在this做for in循环如果有此方法 则调用;

  • ownerDocument表示当前DOM对象所在的文档对象

    循环数组
    for(var i=0;i
  • 兼容
    • ms 前缀要改为Ms css属性;
    • 利用 || 修正函数的参数的问题;
    • 转小写的作用 不同浏览器下nodeName有时是小写 有时是大写;
    • \w中指的是数字字母和下划线 不包括其他符号 (?!)反前向声明,不包含在分组中
    • IE9以下的浏览器中不能序列化标签link script 及用innerHTML不能转化 解决方式是包一层div p51页 使用document.createElement()教会浏览器正确的使用HTML5标签 document.createDocumentFragment()在文档中存在,并且没有挂载在DOM树上
    • json.parse IE8以下不兼容; ActiveXObbject IE兼容;
    • support功能检测比版本检测要好 版本检测版本更新迭代较快

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages