jQuery原型方法中的一些方法
1.方法列表
- toArray 把实例转换成数组
- get 获取指定下标的元素
- each 遍历实例,把遍历到的实例分别传给回调函数
- map 遍历实例,把遍历到的实例分别传给回调函数,然后把回调的返回值收集起来组成一个数组返回
- slice 截取实例的部分元素,组成一个新的jQuery实例返回
- eq 获取指定下标元素,获取的是jquery类型的实例对象。
- push 给实例添加新元素
- sort 对实例中的元素进行排序
- splice 按照指定的下标元素指定数量删除元素,也可以替换删除的元素
2.代码实现
toArray。直接使用数组的slice方法。不传参数默认截取从0到最后一个元素
toArray:function(){ return [].slice.call(this); },
get
get:function(index){ return i == null?this.toArray():(i>=0?this[i]:this[this.length - 1]); },
each方法。each方法,因为不光是jquery实例可以调用,而且还可以作为静态方法,供其他的对象调用,所以该方法定义在jQuery中。
each:function(obj,fn){ var i,k; //处理数组 if (jQuery.isLinkArr(obj)) { for (i = 0;i<obj.length;i++) { //使用call方法,将fn函数中的this值变为对应的value值。 //这里通过判断fn返回值是否是false来判断是否是 if (fn.call(obj[i],i,obj[i]) === false) { break; } } }else { //处理对象 for (k in obj){ if (fn.call(obj[k],k,obj[k]) === false) { break; } } } return obj; }, //在原型中定义 each:function(fn){ return jQuery.each(this,fn); },
map方法。同each方法,也是定义在jquery中,然后在原型中调用map静态方法。
map:function(obj,fn){ var i, len, key, result = []; if( 'length' in obj ) { for ( i = 0, len = obj.length; i < len; i++ ) { //将fn函数调用返回的结果存储进数组 result.push( fn.call( obj[ i ], obj[ i ], i ) ); } }else { for ( key in obj ) { result.push( fn.call( obj[ key ], obj[ key ], key ) ); } return result; } }