//测试Chrome版本 40.0.2214.115 m //如有错误欢迎指出 //在此做一些相关方法的测试 //第一个each //将来改成jq的时候为了方便,速度更快,防止覆盖,直接这样定义 var toString={}.toString; var class2type={}; var hasOwn={}.hasOwnProperty; var isArray=Array.isArray; var indexOf=[].indexOf; var each=function(obj,callback){ var value, length=obj.length, i=0, isArray=isArrayLike(obj); //两种情况 //类数组 if(isArray){ for(;i<length;i++){ //若是返回false,则直接跳出 value=callback.call(obj,i,obj[i]); if(value===false){ break; } } }else{ for(i in obj){ value=callback.call(obj,i,obj[i]); if(value===false){ break; } } } return obj; }; //第二个判断是否像数组一样的对象 var isArrayLike=function(obj){ var length=obj.length; //判断为空 if(obj==null){ return false; } if(type(obj)==="object" ||typeof(obj)==="function"){ return false; } return type(obj)==="array" ||length===0 || (length>0 &&(length-1) in obj); }; //第三个判断类型 var type=function(obj){ //排除为空的 if(obj==null){ return obj+""; } //做判断,如果是object或者function类型的时候 //不是执行后面 return typeof obj==="object" ||typeof obj==="function" ? class2type[toString.call(obj)] : typeof obj; }; each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(_,name){ class2type["[object "+name+"]"]=name.toLowerCase(); }); //第四个一些杂一点的函数 var isFunction=function(obj){ return type(obj); }; var isWindow=function(obj){ return obj!==null && obj.window===window; }; //第个判断是否是字面量 //判断之前做一个测试,形如 {} var isPlainObject=function(obj){ //第一判断,如果不是object类型直接返回false //第二判断是否是节点类型 //第三window if(type(obj)!=="object" ||obj.nodeType||isWindow(obj)){ return false; } //当是{}或者是new Object() 时为真,这两种是符合的 只有object对象的原型中有这个方法 if(hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){ return true; } }; //第五个方法extend拷贝 var extend=function(){ //第一方面分深浅拷贝 deep //第二方面 在jquery中分为向jquery对象添加对象或方法,在此是向window下添加对象或方法, //另一个就是一对象或方法向其它的对象上添加 // var src,copy,copyIsArray,name, clone,//递归时要传的参数 options,//要拷贝的对象 target=arguments[0]||{}, length=arguments.length, i=1, deep=false; if(typeof(target)==="boolean"){ target=arguments[1]||{}; deep=true; i=i+1; } //实际上当参数为以下两种情况是 就是上面所说的第二方面 //第一种是:直接就有一个参数 {} //第二个就是:两个参数 true,{} if(i===length){ target=this;//this是window i=i-1; } //当target,不是对象,函数的这种情况也要排掉 if(!typeof(target)==="object" && !typeof(target)==="function"){ target={}; } for(;i<length;i++){ for(name in options=(arguments[i]!==null) && arguments[i]){ src=target[name]; copy=options[name]; if(src===copy){ continue; } copyIsArray=isArray(copy) //if(deep&©||(isPlainObject(copy))|| (copyIsArray=isArray(copy))){ if(deep&© && (isPlainObject(copy))|| copyIsArray){ if(copyIsArray){ copyIsArray=false; clone=src && isArray(src) ? src :[];//若不是数组类型,改为数组类型 }else{ clone=src && isPlainObject(src) ? src :{}; } target[name]=extend(deep,clone,copy); }else if(copy !==undefined){ target[name]=copy; } } } return target; };
相关推荐
jquery购物车 实现原理分析
本文实例为大家分享了jQuery实现轮播图及其原理的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8" name="viewport" content="width=device-width,...
资源名称:jQuery技术内幕:深入解析jQuery架构设计与...接着详细分析了底层支持模块的源码实现,包括:选择器 Sizzle、异步队列 Deferred、数据缓存 Data、资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
《jquery技术内幕:深入解析jquery架构设计与实现原理》由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jquery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jquery中的实现技巧和...
jQuery无缝滚动原理分析
深入解析jquery架构设计与实现原理》首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jquery的工作原理有大致的印象;进而通过“构造jquery对象”章节分析了构造函数jquery()的各种用法和内部...
jquery1.2.6源码分析,其中里面含有源码详细的中文注释
Jquery1.26版本的源码分析,pdf格式文档,相当清淅的书籍,前端开发者必看的类库书籍,...采用CSS方式查找Dim节点,jQuery类数组的分析,Dom元素的属性及操作,Event事件分析及应用,jquery中的Ajax实现及源码分析等内容.
利用JS和jQuery实现前端布局中的瀑布流布局,适合前端进阶者观看,有详细的视频讲解!
jQuery源码详细分析中文注释
jQuery中如何判断radio选中,这里共有4中方法来实现。
Jquery实现简易留言板
在jquery-1.3.1提供的API中,最完整的方法是jQuery.ajax(options),同时她也是jQuery底层AJAX实现,简单容易的高层实现大家可以看下API中提供的jQuery.get(options)、jQuery.post(options),以及配合JSON做为传输数据...
javascript jquery原理 javascript jquery原理 javascript jquery原理 javascript jquery原理 javascript jquery原理
jQuery实现Table分页跳转,JQUERY实现TABLE分页效果
前端使用JQUERY实现批注功能
一个基于jquery库的点击加载更多实现(可在一个页面实现多个)。 真实的案例。 当初进行项目的时候没有找到合适的代码(找到的很多都是滚动条拖到底自动出现,没有点击出现的),并且要实现一个页面多个点击加载,...
NULL 博文链接:https://bijian1013.iteye.com/blog/2255037
jquery工作原理