在这里我利用之前封装好的extend方法来扩展jquery中的工具类的一些方法,比如isNumberic、isArray、type等方法。下面写的代码都会在(function(window){ //代码 })(window)中
在这里我创建一个对象(class2type)用于存储表示数据类型的字符串的小写格式。
1 var class2type = {}; 2 //将下面的字符串按空格分离成字符串数组 3 var strs = "String Boolean Number Function Math Date Array RegExp Objext Undefined Null".split(" "); 4 //遍历字符串数组,将数组中每一项转化成小写格式存到对象中 5 //对象的键-值(object str-str.toLowercase) 6 for(var i=0;i<strs.length;i++){ 7 var str = str[i]; 8 class2type["[object "+str+"]"]=str.toLowerCase(); 9 }
我再保存对象的toString方法,易于后面扩展方法的时候的调用:
var toString = Object.prototype.toString;
然后就可以利用extend方法来扩展jquery中的工具类的方法了:
1 itMei.extend({ 2 //判断参数是否是一个数字方法 3 isNumberic:function(num){ 4 return typeof num ==="number" && !isNaN(num); 5 }, 6 //判断参数是不是一个数组的方法 7 isArray:function(array){ 8 return Array.isArray(array):itMei.type(array)==="array"; 9 }, 10 //检测内置对象的数据类型的方法,该方法返回的数据类型名称的小写格式 11 type:function(arg){ 12 var typeName; 13 var temp = toString.call(arg); 14 return class2type[temp]; //用到上面定义好的class2type对象 15 }, 16 //判断一个对象是否是空对象的方法 17 isEmptyObject:function(obj){ 18 for(var k in obj){ //如果能进行遍历,不是空对象 19 return false; 20 } 21 return true; 22 }, 23 //抛出异常的方法 24 error:function(msg){ 25 throw msg; 26 }, 27 //合并数组的方法 28 merge:function(source,target){ 29 //将source数组中的元素添加到目标数组target中 30 var j=0; 31 var i = target.length; 32 while(source[j]!==undefined){ 33 target[i++] = source[j++]; 34 } 35 target.length = i; 36 return target; 37 }, 38 //去除字符串首尾空格的方法 39 trim:function(str){ 40 return str.trim ? str.trim():str.replace(/^s+|s+$/g,""); 41 }, 42 //提供遍历的方法 43 each:function(array,callback){ 44 var i,len; 45 //当是遍历数组或伪数组的时候 46 if(itMei.type(array.length)==="number" && array.length>=0){ 47 for(i=0,len=array.length;i<len;i++){ 48 if(callback.call(array[i],i,array[i])===false){ 49 break; 50 }; 51 } 52 }else{ 53 //遍历普通对象 54 for(i in array){ 55 if(callback.call(array[i],i,array[i])===false){ 56 break; 57 } 58 } 59 } 60 } 61 }); 62 63 //对于遍历的方法,还有一个each方法,是针对dom元素的遍历的,对于操作dom元素的方法我们需要用itMei.fn中的extend方法来扩展 64 itMei.fn.extend({ 65 each:function(callback){ 66 itMei.each(this,callback); //使用上面封装的工具类的each实现遍历 67 return this; //返回当前调用方法的实例对象,是为了实现jquery中的链式编程 68 } 69 })
在这里封装了8个工具类的方法,以及一个遍历dom元素的each方法。
封装extend方法在http://www.cnblogs.com/amaya-mei/p/6060466.html中。