WEB开发网
开发学院网页设计JavaScript Jquery源码分析---jQuery类数组的分析 阅读

Jquery源码分析---jQuery类数组的分析

 2010-09-14 13:36:40 来源:WEB开发网   
核心提示: this.setArray(jQuery.makeArray(selector));是其第二种实现的方法,上面实现是单个的元素,Jquery源码分析---jQuery类数组的分析(2),这个实现的多个元素的集合,它首先调用了jQuery.makeArray(selector)这个静态方法把

this.setArray(jQuery.makeArray(selector));

是其第二种实现的方法,上面实现是单个的元素,这个实现的多个元素的集合。它首先调用了jQuery.makeArray(selector)这个静态方法把集合(类数组)转换成数组。

上面已经分析了数组和对象都可以采用obj.[attr]的形式来取得其key对应的value。对于集合或类数组,必须要求其实现length属性,有了length的长度,那么就从0~length-1的key属性中取得对应的value就可以了:

//把类数组的集合转换成数组,如果是单个元素就生成单个元素的数组。
makeArray: function( array ) {
  var ret = [];
  if( array != null ){ var i = array.length;
  //单个元素,但window, string、 function有 'length'的属性,加其它的判断
   if( i == null || array.split || array.setInterval || array.call )
     ret[0] = array;
   else//类数组的集合
     while( i )  ret[--i] = array[i];//Clone数组
   }
return ret;
  },

生成了一个标准的数组,那么接下来setArray来干什么呢?

// 把array-like对象的元素全部push当前jquery对象。
  setArray : function(elems) {
    this.length = 0;//初始化长度,因为push会在原始的length++
    Array.prototype.push.apply(this, elems);
    return this;
  },

这个调用了Array.prototype.push来自动修改length的属性值(当然是加入了元素)。由此可以推想到Array中众多的方法(如shift)都可以看作改变length的值在对象的key/value对中完成无序到有序或重新排序的工作。实际上Array等是采用C或C++来实现的。但是它构出的JS特性让我们可以这样去思考采用JavaScript的实现方式。

上一页  1 2 3 4 5 6 7  下一页

Tags:Jquery 源码 分析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接