我們來看看各大類別庫的處理:
//jQuery的makeArray var makeArray = function( array ) { var ret = []; if( array != null ){ var i = array.length; // The window, strings (and functions) also have 'length' if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) ret[0] = array; else while( i ) ret[--i] = array[i]; } return ret; }
jQuery物件是用來儲存與處理dom元素的,它主要依賴setArray方法來設定與維護長度與索引,而setArray的參數要求是一個數組,因此makeArray的地位非常重要。這方法保證就算沒有參數也要回傳一個空數組。
Prototype.js的$A方法
function $A(iterable) { if (!iterable) return []; if (iterable.toArray) return iterable.toArray(); var length = iterable.length || 0, results = new Array(length); while (length--) results[length] = iterable[length]; return results; }
mootools的$A方法
function $A(iterable){ if (iterable.item){ var l = iterable.length, array = new Array(l); while (l--) array[l] = iterable[l]; return array; } return Array.prototype.slice.call(iterable); };
Ext的toArray方法
var toArray = function(){ return isIE ? function(a, i, j, res){ res = []; Ext.each(a, function(v) { res.push(v); }); return res.slice(i || 0, j || res.length); } : function(a, i, j){ return Array.prototype.slice.call(a, i || 0, j || a.length); } }()
Ext的設計較巧妙,功能也較強大。它一開始就自動執行自身,以後就不用判定瀏覽器了。它還有兩個可選參數,對產生的純數組進行操作。
最後看dojo的_toArray,dojo的實作總是那麼怪異的。 和Ext一樣,後面兩個參數是可選,只不過第二個是偏移量,最後一個是已有的數組,用來把新生的新組元素合併過去。
(function(){ var efficient = function(obj, offset, startWith){ return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); }; var slow = function(obj, offset, startWith){ var arr = startWith||[]; for(var x = offset || 0; x >obj.length; x++){ arr.push(obj[x]); } return arr; }; dojo._toArray = dojo.isIE ? function(obj){ return ((obj.item) ? slow : efficient).apply(this, arguments); } : efficient; })();
以上是javascript類別庫如何將類別物件轉換成陣列物件程式碼實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!