欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Array.prototype.slice.apply的使用方法

 更新時(shí)間:2010年03月17日 19:53:19   作者:  
arguments在JavaScript語法中是函數(shù)特有的一個(gè)對(duì)象屬性(Arguments對(duì)象),用來引用調(diào)用該函數(shù)時(shí)傳遞的實(shí)際參數(shù)。
復(fù)制代碼 代碼如下:

function test(){ 
 //將參數(shù)轉(zhuǎn)為一個(gè)數(shù)組 
  var args = Array.prototype.slice.apply(arguments); 
 alert(args); 
}

arguments在JavaScript語法中是函數(shù)特有的一個(gè)對(duì)象屬性(Arguments對(duì)象),用來引用調(diào)用該函數(shù)時(shí)傳遞的實(shí)際參數(shù)。這個(gè)對(duì)象很象數(shù)組,擁有l(wèi)ength屬性且使用下標(biāo)的形式來獲取其元素,但它又并非真正的Array對(duì)象。更多關(guān)于Arguments對(duì)象的資料請(qǐng)參閱《JavaScript權(quán)威指南》。
  所以,直接調(diào)用arguments.slice()將返回一個(gè)"Object doesn't support this property or method"錯(cuò)誤,因?yàn)閍rguments不是一個(gè)真正的數(shù)組。而以上代碼調(diào)用Array.prototype.slice.apply(arguments)的意義就在于它能將函數(shù)的參數(shù)對(duì)象轉(zhuǎn)化為一個(gè)真正的數(shù)組。JavaScript腳本引擎如何實(shí)現(xiàn)我們不得而知,但這種方式確實(shí)是有效的,而且在主流瀏覽器上都測(cè)試通過。另一方面也可推知Arguments對(duì)象和Array對(duì)象的親緣關(guān)系。如果你在編寫JavaScript的時(shí)候,常常碰到需要將arguments對(duì)象轉(zhuǎn)成Array來處理的情形,這個(gè)技巧可以幫上忙?!?
  這個(gè)技巧來自鼎鼎大名的DouglasCrockford。推而廣之,Array其他的原型方法也可以應(yīng)用在arguments上,比如: 
var arg0 = Array.prototype.shift.apply(arguments);
  shift也是Array的一個(gè)實(shí)例方法,用于獲取并返回?cái)?shù)組的第一個(gè)元素。當(dāng)然如上的調(diào)用雖然可執(zhí)行,但卻純屬多余,不如直接調(diào)用arguments[0]來的簡(jiǎn)單直接。再推而廣之,我們也可以對(duì)很多形似Array的Collection對(duì)象應(yīng)用這個(gè)技巧,比如Array.prototype.slice.apply(document.getElementsByTagName('div')); 不過很遺憾,IE并不支持這樣的調(diào)用,F(xiàn)irefox和Opera則都能得到正確的結(jié)果?!?
  Prototype1.4中增加的$A()方法也常用來將arguments轉(zhuǎn)為數(shù)組,我們看它的實(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用一個(gè)for循環(huán)來構(gòu)造新數(shù)組,這樣是為了保證最大限度的兼容性。

相關(guān)文章

最新評(píng)論