JavaScript學(xué)習(xí)筆記之Function對象
在JavaScript中,函數(shù)function就是對象。
JS中沒有方法重載
在JavaScript中,沒有方法(函數(shù))重載的概念。
例子:
<html>
<head>
<script type="text/javascript">
function add(number)
{
alert(number + 20);
}
function add(number, number1)
{
alert(number + 30);
}
add(10);
</script>
</head>
<body>
</body>
</html>
網(wǎng)頁中彈框顯示的是40。
說明雖然第二個(gè)方法是兩個(gè)參數(shù),但是仍然調(diào)用了它。
交換兩個(gè)方法的順序之后,彈框顯示30,可以看出不管參數(shù)個(gè)數(shù)如何,是調(diào)用同名的后面的方法。
怎么解釋這個(gè)現(xiàn)象?
這是因?yàn)楹瘮?shù)聲明實(shí)際上是建立了一個(gè)對象:
<html>
<head>
<script type="text/javascript">
function add(number)
{
alert(number + 20);
}
/*
上面的函數(shù)等價(jià)于:
var add = function(number)
{
alert(number + 20);
}
*/
function add(number, number1)
{
alert(number + 30);
}
/*
上面的函數(shù)等價(jià)于:
var add = function(number, number1)
{
alert(number + 30);
}
*/
add(10);
</script>
</head>
<body>
</body>
</html>
這樣add實(shí)際指向的是后面的對象,而方法調(diào)用的時(shí)候賦予的參數(shù)將會按順序賦給方法形式參數(shù),后面沒有被賦值的參數(shù)就是undefined。
JavaScript的函數(shù)調(diào)用的時(shí)候沒有嚴(yán)格的參數(shù)個(gè)數(shù)檢查,實(shí)參個(gè)數(shù)小于形參個(gè)數(shù)是可以的,沒有被賦值的形參就是未定義值undefined。
實(shí)參個(gè)數(shù)大于形參個(gè)數(shù)也是可以的,這樣只有前面的實(shí)參會被使用,多出來的實(shí)參不會被使用。
Function對象
在JavaScript中有一個(gè)Function對象,所有自定義的函數(shù)都是Function對象類型的。
Function對象接收的所有參數(shù)都是字符串類型的,其中最后一個(gè)參數(shù)就是要執(zhí)行的函數(shù)體,而前面的參數(shù)則是函數(shù)真正需要接收的參數(shù)。
例子:
<html>
<head>
<script type="text/javascript">
var add = new Function("number", "number1", "alert(number + number1);");
var add = new Function("number", "alert(number + 20);");
add(10, 30);
</script>
</head>
<body>
</body>
</html>
隱含對象arguments
在JavaScript中,每個(gè)函數(shù)都有一個(gè)隱含的對象arguments,表示給函數(shù)實(shí)際傳遞的參數(shù)。
arguments和函數(shù)的形式參數(shù)及其個(gè)數(shù)無關(guān)。
arguments有個(gè)有用的屬性length,表示實(shí)參的長度??梢越柚@個(gè)來模擬出函數(shù)的重載:
練習(xí)例子:
<html>
<head>
<script type="text/javascript">
function add(number1, number2)
{
alert(arguments.length);
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
//add(2, 3, 4);
function add2()
{
if(1 == arguments.length)
{
alert(arguments[0]);
}
else if(2 == arguments.length)
{
alert(arguments[0] + arguments[1]);
}
else if(3 == arguments.length)
{
alert(arguments[0] + arguments[1] + arguments[2]);
}
}
add2(3);
add2(3, 4);
add2(3, 4, 5);
</script>
</head>
<body>
</body>
</html>
每一個(gè)函數(shù)對象都有一個(gè)length屬性,表示該函數(shù)期望接收的參數(shù)格式。
它與函數(shù)的arguments不同,arguments.length表示函數(shù)實(shí)際接收的參數(shù)個(gè)數(shù)。
例子:
<html>
<head>
<script type="text/javascript">
var add = function(num, num2, num3)
{
alert(num + num2 + num3);
}
alert(add.length); //輸出3
add(1, 2, 3);
var add2 = function()
{
}
alert(add2.length); //輸出0
</script>
</head>
<body>
</body>
</html>
- Javascript Function對象擴(kuò)展之延時(shí)執(zhí)行函數(shù)
- 關(guān)于javascript function對象那些迷惑分析
- 淺談javascript對象模型和function對象
- JavaScript學(xué)習(xí)小結(jié)(一)——JavaScript入門基礎(chǔ)
- 淺談Javascript中Object與Function對象
- 每天一篇javascript學(xué)習(xí)小結(jié)(基礎(chǔ)知識)
- 每天一篇javascript學(xué)習(xí)小結(jié)(Array數(shù)組)
- 每天一篇javascript學(xué)習(xí)小結(jié)(Boolean對象)
- 每天一篇javascript學(xué)習(xí)小結(jié)(Date對象)
- 每天一篇javascript學(xué)習(xí)小結(jié)(Function對象)
相關(guān)文章
ES6學(xué)習(xí)總結(jié)之Set和Map的使用
這篇博客介紹了 ES6 中的 Set 和 Map 數(shù)據(jù)結(jié)構(gòu),Set 是一個(gè)存儲唯一值的集合,支持添加、刪除、檢查元素的方法,Map 則是用于存儲鍵值對的集合,鍵和值都可以是任何類型,文章詳細(xì)講解了兩者的主要方法和用法,并與傳統(tǒng)的數(shù)組和對象進(jìn)行了對比,突出 Set 和 Map 的獨(dú)特優(yōu)勢2024-08-08
JavaScript中各數(shù)制轉(zhuǎn)換全面總結(jié)
這篇文章主要介紹了JavaScript中各數(shù)制轉(zhuǎn)換,利用toString的基模式來進(jìn)行轉(zhuǎn)換,對數(shù)字調(diào)用 toString(10) 與調(diào)用 toString() 它們返回的區(qū)別和相同之處等等都在本文中提及,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08

