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上面的方法(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。