首頁  >  文章  >  web前端  >  jQuery源碼分析之makeArray方法

jQuery源碼分析之makeArray方法

黄舟
黄舟原創
2017-07-19 09:49:201466瀏覽

在jQuery中,makeArray#是一個私有的方法,它主要用於將「類別數組物件」轉換為陣列。

那什麼是「類別數組物件」

比方說每一個function中都有一個arguments對象,它是實參列表,擁有length屬性,也可以透過下標來存取實參。

	function foo(){
		//1
		console.log(arguments.length);
		//10
		console.log(arguments[0]);
	}
	
	foo(10);

除此之外,像是HTMLCollectionNodeList等類型的物件也是“類別數組物件”

它們的共通性有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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn