在jQuery中,makeArray#是一個私有的方法,它主要用於將「類別數組物件」轉換為陣列。
那什麼是「類別數組物件」?
比方說每一個function中都有一個arguments對象,它是實參列表,擁有length屬性,也可以透過下標來存取實參。
function foo(){ //1 console.log(arguments.length); //10 console.log(arguments[0]); } foo(10);
除此之外,像是HTMLCollection,NodeList等類型的物件也是“類別數組物件”。
它們的共通性有2點:
1.擁有length屬性。
2.可以透過下標來存取元素。
類別數組物件相較於數組,少了很多便捷的API,因此很多框架提供了轉換方法。
最簡單的方法,是利用Array.prototype上的slice方法:
function makeArray(array){ return Array.prototype.slice.call(array); }
但jQuery為了相容早期的IE,提供了自己的實作。
var makeArray = function(array){ //存储元素的新数组 var ret = []; if(array != null){ var i = array.length; /* 分别对应四种非类数组对象情况: 1.没有length属性 2.为字符串 3.是函数 4.是window对象 */ if(i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval) ret[0] = array; else while(i) ret[--i] = array[i]; } return ret; };
它的影響有3點:
1.即使沒有傳參,也會傳回一個空的陣列。
2.如果傳了類別陣列物件,會傳回新的元素陣列。
3.如果傳入了非類別陣列物件,會把這個物件當作新陣列的第一個元素。
以上是jQuery源碼分析之makeArray方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!