Javascript 中的 Function对象
在 js 中 函數 Function(大寫) 就是一個對象。在 javascript 中沒有函數 reload (重載)的概念。
我們看下面這個,結果應該是什么呢?
<html><head><script type="text/javascript">function add(number){alert(number+20);}function add(number){alert(number+30);}add(10);</script></head><body></body> </html>結果是 40. 也就是第二個 add()方法的結果。我們再改成
<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>結果還是40.雖然第二個 add()中有2個參數。
我們把兩個 add()方法調換位置。
<html><head><script type="text/javascript">function add(number, number1){alert(number+30);}function add(number){alert(number+20);}add(10);</script></head><body></body> </html>結果變成了 30。
難道 js 是查看哪個方法在后面么?不是。
其實對于第一個 add(number){alert(number+20;} 方法,它等于
var add = function (number) //f 是小寫 { alert(number + 20); }也就是說 function (number){alert(number+20);} 是一個對象。而 add 是指向 function 對象的引用。
所以第二個變成了
var add = function (number, number1) { alert(number + 30); }這時候 add 已經指向了這個 function 對象,而不再指向原來的 (number+20)對象。又由于 js 中可以定義2個參數卻僅僅傳遞1個參數,所以 add指向的新的 function對象仍然可以繼續執行。
我們再看下面這個。結果是什么呢?
<html><head><script type="text/javascript">function add(number){alert(number+20);}function add(number, number1){alert(number1);}add(10);//注意:這里只傳遞了 number 沒有傳遞 number1</script></head><body></body> </html>結果是: undefined
javascript 中有一種數據類型叫 Undefined。它只有一個值 undefined.
就像java中有數據類型 boolean,它有兩個值 true或者 false一樣。
在 javascript 中有個 Function(大寫)? 對象,所有自定義的函數都是 Function (大寫)對象類型的。
既然如此,我們也可以用 Function 對象來直接定義函數:
注意, Function 這個對象中所有的參數都是字符串的形式的(即使我們用 add(10)傳進來一個數字),而且他的最后一個參數(這里指 "alert(number+20)")是要執行的函數體。
再看一個實例
<html><head><script type="text/javascript">var add2 = new Function("number", "number1", "alert(number+number1);");add2(10,20);</script></head><body></body> </html>結果:30
在 js中每個函數都有一個隱含的對象 arguments,表示給函數實際傳遞的參數。
我們看這個
?
<html><head><script type="text/javascript">function add(num1, num2){alert(arguments[0]);alert(arguments[1]);}add(2,3);</script></head><body></body> </html>?
結果會依次打印出 2 , 3
我們再看一個
<html><head><script type="text/javascript">function add(num1, num2){alert(arguments[0]);alert(arguments[1]);alert(arguments[2]);}add(2,3,4);</script></head><body></body> </html>上面的例子add只定義了兩個參數,但是調用的時候傳進來3個參數,可以么?結果如何?
可以的。結果是一次打印出 2, 3, 4。
這就是說 arguments 這個固有對象是不受自定義方法的影響的。
arguments 還有一個屬性 length,表示有幾個參數,比如:
?
<html><head><script type="text/javascript">function add(num1, num2){alert(arguments.length);}add(2,3,4);</script></head><body></body> </html>?
結果是: 3
表示3 個參數。
js 是不支持方法重載的,但是我們可以使用 arguments模擬出來方法的重載的。
?
<html><head><script type="text/javascript">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(1);add2(1,1);add2(1,1,1);</script></head><body></body> </html>?
結果,分別打印出 1, 2, 3
其實,由于 javascript 中對傳入參數數量沒有嚴格限定, 在很多框架中都應用了 arguments來限定用戶輸入的參數個數。
轉載于:https://www.cnblogs.com/backpacker/archive/2012/08/01/2617642.html
總結
以上是生活随笔為你收集整理的Javascript 中的 Function对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5 网站大观:12个优秀的 HT
- 下一篇: java comparable Com