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