Array.prototype.slice.apply的使用方法
更新時間:2010年03月17日 19:53:19 作者:
arguments在JavaScript語法中是函數(shù)特有的一個對象屬性(Arguments對象),用來引用調(diào)用該函數(shù)時傳遞的實際參數(shù)。
復(fù)制代碼 代碼如下:
function test(){
//將參數(shù)轉(zhuǎn)為一個數(shù)組
var args = Array.prototype.slice.apply(arguments);
alert(args);
}
arguments在JavaScript語法中是函數(shù)特有的一個對象屬性(Arguments對象),用來引用調(diào)用該函數(shù)時傳遞的實際參數(shù)。這個對象很象數(shù)組,擁有l(wèi)ength屬性且使用下標(biāo)的形式來獲取其元素,但它又并非真正的Array對象。更多關(guān)于Arguments對象的資料請參閱《JavaScript權(quán)威指南》。
所以,直接調(diào)用arguments.slice()將返回一個"Object doesn't support this property or method"錯誤,因為arguments不是一個真正的數(shù)組。而以上代碼調(diào)用Array.prototype.slice.apply(arguments)的意義就在于它能將函數(shù)的參數(shù)對象轉(zhuǎn)化為一個真正的數(shù)組。JavaScript腳本引擎如何實現(xiàn)我們不得而知,但這種方式確實是有效的,而且在主流瀏覽器上都測試通過。另一方面也可推知Arguments對象和Array對象的親緣關(guān)系。如果你在編寫JavaScript的時候,常常碰到需要將arguments對象轉(zhuǎn)成Array來處理的情形,這個技巧可以幫上忙。
這個技巧來自鼎鼎大名的DouglasCrockford。推而廣之,Array其他的原型方法也可以應(yīng)用在arguments上,比如:
var arg0 = Array.prototype.shift.apply(arguments);
shift也是Array的一個實例方法,用于獲取并返回數(shù)組的第一個元素。當(dāng)然如上的調(diào)用雖然可執(zhí)行,但卻純屬多余,不如直接調(diào)用arguments[0]來的簡單直接。再推而廣之,我們也可以對很多形似Array的Collection對象應(yīng)用這個技巧,比如Array.prototype.slice.apply(document.getElementsByTagName('div')); 不過很遺憾,IE并不支持這樣的調(diào)用,F(xiàn)irefox和Opera則都能得到正確的結(jié)果。
Prototype1.4中增加的$A()方法也常用來將arguments轉(zhuǎn)為數(shù)組,我們看它的實現(xiàn):
復(fù)制代碼 代碼如下:
var $A = Array.from = function(iterable) {
if(!iterable) return[];
if(iterable.toArray) {
returniterable.toArray();
} else {
varresults = [];
for(vari=0; i<iterable.length; i++)
results.push(iterable[i]);
returnresults;
}
}
Prototype用一個for循環(huán)來構(gòu)造新數(shù)組,這樣是為了保證最大限度的兼容性。
相關(guān)文章
javascript html5輕松實現(xiàn)拖動功能
這篇文章主要為大家詳細(xì)介紹了javascript html5輕松實現(xiàn)拖動功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03jQuery Mobile動態(tài)刷新頁面樣式的實現(xiàn)方法
下面小編就為大家?guī)硪黄猨Query Mobile動態(tài)刷新頁面樣式的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05