Javascript中的arguments與重載介紹
因?yàn)檎Z言上的設(shè)計(jì)錯(cuò)誤,arguments可以被當(dāng)成一個(gè)數(shù)組。
function zero () {
console.log(arguments[0]);
}
也會(huì)有
function zero () {
for(var i=0;i<arguments.length;i++){
console.log(arguments[i]);
}
}
它利用了Javascript的一個(gè)事實(shí),即Javasc
而這里的arguments變量給實(shí)參提供了一個(gè)類似數(shù)組的接口。因?yàn)檫@里的arguments的可變參數(shù),我們可以利用這個(gè)有意思的東西來做一些有意思的事,比如重載。
Javscript 重載
stackvoerflow上有一個(gè)關(guān)于重載的問題,于是有了第一個(gè)答案
if (typeof friend === "undefined") {
} else {
}
還有一個(gè)答案則是
switch (arguments.length) {
case 0:
//Probably error
break;
case 1:
//Do something
break;
case 2:
default: //Fall through to handle case of more parameters
//Do something else
break;
}
只是這種方式真的不好看,難道我們的函數(shù)最后要變成這樣子的?
function zero1 (){
console.log('arguments 1')
};
function zero2 (){
console.log('arguments 2')
};
function zero () {
if(arguments.length == 1){
zero1();
} else{
zero2();
}
}
真的一點(diǎn)都不好看,即使我們換個(gè)switch..case,也不好看啊。
Javascript arguments不是一個(gè)數(shù)組
arguments不是向我們看到的那樣一直是一個(gè)數(shù)組,有時(shí)候可能不是。
function hello(){
console.log(typeof arguments);
}
這里arguments的類型是一個(gè)對(duì)象,雖然數(shù)組的類型也是一個(gè)對(duì)象,雖然我們可以將之轉(zhuǎn)換為一個(gè)數(shù)組
var args = Array.prototype.slice.call(arguments);
但是這也表明了這不是一個(gè)數(shù)組,它擁有的只有Array的唯一一個(gè)屬性,即length。除此還有
arguments.callee
Reference to the currently executing function.
arguments.caller
Reference to the function that invoked the currently executing function.
arguments.length
Reference to the number of arguments passed to the function.
相關(guān)文章
關(guān)于TypeScript模塊導(dǎo)入的那些事
Typescrit的模塊機(jī)制與es6的模塊基本類似,也提供了轉(zhuǎn)換為amd,es6,umd,commonjs,system的轉(zhuǎn)換,下面這篇文章就來給大家詳細(xì)介紹了關(guān)于TypeScript模塊導(dǎo)入的那些事,需要的朋友可以參考借鑒,下面來一起看看吧2018-06-06如何在CocosCreator中使用http和WebSocket
這篇文章主要介紹了在Cocos Creator中使用的Http和WebSocket,對(duì)websocket感興趣的同學(xué),一定要看下2021-04-04Some tips of wmi scripting in jscript (1)
Some tips of wmi scripting in jscript (1)...2007-04-04JavaScript 處理Iframe自適應(yīng)高度(同或不同域名下)
Iframe自適應(yīng)高度一直都備受關(guān)注,接下來為大家介紹下同域名下Iframe自適應(yīng)高度的處理以及跨域時(shí)Iframe高度自適應(yīng),感興趣的朋友可以參考下哈2013-03-03JS動(dòng)態(tài)給對(duì)象添加事件的簡(jiǎn)單方法
下面小編就為大家?guī)硪黄狫S動(dòng)態(tài)給對(duì)象添加事件的簡(jiǎn)單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07判斷是否安裝flash player及當(dāng)前版本的JS代碼
本文為大家講述下如何使用jsJS判斷是否安裝flash player及版本,下面的處理代碼或許對(duì)大家有所幫助,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08不同js異步函數(shù)同步的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄煌琷s異步函數(shù)同步的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05