国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-21 00:39:58
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

function test(){ 
 //將參數轉為一個數組 
  var args = Array.prototype.slice.apply(arguments); 
 alert(args); 
}

arguments在JavaScript語法中是函數特有的一個對象屬性(Arguments對象),用來引用調用該函數時傳遞的實際參數。這個對象很象數組,擁有length屬性且使用下標的形式來獲取其元素,但它又并非真正的Array對象。更多關于Arguments對象的資料請參閱《JavaScript權威指南》。
  所以,直接調用arguments.slice()將返回一個"Object doesn't support this property or method"錯誤,因為arguments不是一個真正的數組。而以上代碼調用Array.prototype.slice.apply(arguments)的意義就在于它能將函數的參數對象轉化為一個真正的數組。JavaScript腳本引擎如何實現我們不得而知,但這種方式確實是有效的,而且在主流瀏覽器上都測試通過。另一方面也可推知Arguments對象和Array對象的親緣關系。如果你在編寫JavaScript的時候,常常碰到需要將arguments對象轉成Array來處理的情形,這個技巧可以幫上忙。 
  這個技巧來自鼎鼎大名的DouglasCrockford。推而廣之,Array其他的原型方法也可以應用在arguments上,比如: 
var arg0 = Array.prototype.shift.apply(arguments);
  shift也是Array的一個實例方法,用于獲取并返回數組的第一個元素。當然如上的調用雖然可執行,但卻純屬多余,不如直接調用arguments[0]來的簡單直接。再推而廣之,我們也可以對很多形似Array的Collection對象應用這個技巧,比如Array.prototype.slice.apply(document.getElementsByTagName('div')); 不過很遺憾,IE并不支持這樣的調用,Firefox和Opera則都能得到正確的結果。 
  Prototype1.4中增加的$A()方法也常用來將arguments轉為數組,我們看它的實現: 
復制代碼 代碼如下:

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循環來構造新數組,這樣是為了保證最大限度的兼容性。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 右玉县| 西丰县| 清水县| 富顺县| 格尔木市| 绥芬河市| 闻喜县| 沙洋县| 上饶县| 津市市| 靖远县| 涟水县| 定西市| 仙居县| 三门峡市| 庐江县| 华池县| 随州市| 夹江县| 通州区| 乌海市| 阳信县| 靖安县| 灌阳县| 平原县| 普兰县| 米林县| 贺州市| 石景山区| 清水河县| 尼木县| 宁化县| 天峨县| 南安市| 夏河县| 兴海县| 华安县| 海晏县| 宁德市| 丰顺县| 进贤县|