jq源码解析之绑在$,jQuery上面的方法(实例讲解)
1.当我们用$符号直接调用的方法。在jQuery内部是如何封装的呢?有没有好奇心?
//jQuery.extend的方法是绑定在$上面的。 jQuery.extend({ //expando用于决定当前页面的唯一性。/\D/非数字。其实就是去掉小数点。 expando:"jQuery"+(version+Math.random()).replace(/\D/g,""), //AssumejQueryisreadywithoutthereadymodule isReady:true, //报错的情况 error:function(msg){ thrownewError(msg); }, //空函数 noop:function(){}, //判断是不是一个函数 isFunction:function(obj){ returnjQuery.type(obj)==="function"; }, //判断当前对象是不是window对象。 isWindow:function(obj){ returnobj!=null&&obj===obj.window; }, //判断obj是不是一个数字当为一个数字字符串的时候页可以的哦比如"3.2" isNumeric:function(obj){ vartype=jQuery.type(obj); return(type==="number"||type==="string")&& //这个话的意思就是要限制"3afc这个类型的字符串" !isNaN(obj-parseFloat(obj)); }, //判断obj是不是一个对象 isPlainObject:function(obj){ varproto,Ctor; //obj存在且toString.call(obj)!=="[objectobject]";就肯定不是一个对象了。 if(!obj||toString.call(obj)!=="[objectObject]"){ returnfalse; } //getProto获取原型链上的对象。getProto=Object.getPrototypeOf();获取原型链上的属性 proto=getProto(obj); //getProto(Object.create(null))->proto==null这种情况也是对象obj=Object.create(null); if(!proto){ returntrue; } //obj原型上的属性。proto上面有constructorhasOwn=hasOwnPrototypeOf('name')判断某个对象自身是否有这个属性 //Ctor:当proto自身有constructor的时候,取得constructor这个属性的value值。其实就是obj的构造函数。type->function Ctor=hasOwn.call(proto,"constructor")&&proto.constructor; //Ctor类型为“function”且为构造函数类型吧。这个时候obj也是对象。我的理解这个时候,obj=newO();其实就是某个构造函数的实列 returntypeofCtor==="function"&&fnToString.call(Ctor)===ObjectFunctionString; }, //判断obj是不是一个空对象 isEmptyObject:function(obj){ //varo={} varname; for(nameinobj){ returnfalse; } returntrue; }, //获取js的数据类型。其实方法就是Object.prototype.toString.call(xx);xx就是要检测的某个变量。得到的结果是"[objectobject]""[objectarray]"... type:function(obj){ //除去null和undefined的情况。返回本身。也就是null或者undefined.因为undefined==null->true。 if(obj==null){ returnobj+""; } //这个跟typeofxx(某个变量)->undefinedobject,number,string,function,boolean(typeof一个变量只能得到6中数据类型) /** *1.obj是一个对象或者obj是一个function那么直接class2type[toString.call(obj)]这个话其实是在class2type中根据key值找到对应的value。 *class2type={ *[objectobject]:"object", *[objectarray]:"array"... * *} *这样类似的值。 *class2type[toString.call(obj)]||"object"连起来读就是,在class2type中找不到类型的值,就直接返回object * *2.或者返回typeofobj。的数据类型。->number,string,boolean基本数据了类型吧。(js中有5中基本数据类型。null,undefined,number,string,boolean) */ returntypeofobj==="object"||typeofobj==="function"? class2type[toString.call(obj)]||"object": typeofobj; }, //翻译为:全局的Eval函数。说句实话。没有看懂这个是拿来干嘛的。DOMval(); /** * *@paramcode *functionDOMEval(code,doc){ doc=doc||document; varscript=doc.createElement("script"); script.text=code; doc.head.appendChild(script).parentNode.removeChild(script); } 创建一个script标签,或remove这个标签。目前没有搞懂拿来干嘛用。 */ globalEval:function(code){ DOMEval(code); }, //这个是用来转为驼峰的用函数吧。ms-前缀转为驼峰的吧。 camelCase:function(string){ returnstring.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase); }, //each方法。$.each(obj,function(){});用于循环数组和对象的方法。 each:function(obj,callback){ varlength,i=0; if(isArrayLike(obj)){//当obj是一个数组的时候执行这个方法 length=obj.length; for(;i以上这篇jq源码解析之绑在$,jQuery上面的方法(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。