參考文檔:http://www.jb51.net/article/46323.htm
arguments
arguments 該對象代表正在執(zhí)行的函數(shù)和調(diào)用它的函數(shù)的參數(shù)。它是一個類數(shù)組的對象错英,因為它具有數(shù)組一樣的訪問性質(zhì)及方式入撒,可以通過下標(biāo)來訪問參數(shù)的每個值。和js中g(shù)etElementsByTagName獲取的也是類數(shù)組對象(NodeList對象)
轉(zhuǎn)換成數(shù)組類型方法:
1椭岩、Array.prototype.slice.apply( arraylist ); (即:[].apply.call( arguments ))
2茅逮、創(chuàng)建一個空數(shù)組璃赡,然后遍歷arguments(或NodeList對象),將每個元素push到數(shù)組中
測試是否為數(shù)組方法:
附:有時我們調(diào)用map等函數(shù)時献雅,在參數(shù)函數(shù)中沒有傳參也能獲取arguments[0]的值碉考,是因為該函數(shù)在map函數(shù)聲明時就初始化了參數(shù)函數(shù)中的各個參數(shù)的值。
caller
返回一個對函數(shù)的引用惩琉,該函數(shù)調(diào)用了當(dāng)前函數(shù)。
如果在字符串上下文中使用 caller屬性夺荒,那么結(jié)果和 functionName.toString 一樣瞒渠,也就是說,顯示的是函數(shù)的反編譯文本
callee
返回正被執(zhí)行的Function對象技扼,用于自身遞歸
可以判斷實參和形參是否長度相等
apply伍玖、call
改變調(diào)用某方法的this指針,通俗上說就是調(diào)用某個對象上的一個方法
語法上區(qū)別: 參數(shù)上的區(qū)別
常用實例:
1剿吻、對某方法的調(diào)用
2窍箍、實現(xiàn)繼承
3、調(diào)用父類的方法
4丽旅、類數(shù)組的轉(zhuǎn)化
擴展1:可以改變this指針的bind()
擴展2:當(dāng)apply和call第一個參數(shù)為null
對于apply和call:
第一個參數(shù)為null椰棘、undefined,在非嚴格模式下榄笙,會使this指向全局對象
擴展3:關(guān)于類數(shù)組對象
javascript中存在一些類似于數(shù)組的數(shù)組對象
他們擁有:
1、length屬性
2茅撞、可以通過索引訪問
類數(shù)組對象和數(shù)組的區(qū)別:
1帆卓、類數(shù)組對象沒有數(shù)組的大部分方法
2、有些數(shù)組對象是動態(tài)變化的
注:Array.prototype.slice()米丘,只要對象有l(wèi)ength屬性并可以通過索引訪問剑令,就可以使用該方法。
????? 例如: {length:5}和NodeList都是類數(shù)組對象拄查!
數(shù)組與類數(shù)組對象的轉(zhuǎn)化吁津,和前面講得一樣:
Array.prototype.slice.apply( arraylist );