函數(shù):對象
函數(shù)是javascript中的一種特殊形式的對象。它是第一個[b〕類數(shù)據(jù)類型(class data type)。這意味著我們能夠給它增加屬性。這里有一些需要注意的有趣觀點:
對象的創(chuàng)建
就像剛才提及的,當(dāng)我們定義一個函數(shù)時,javascript實際上在后臺為你創(chuàng)建了一個對象。這個對象的名稱就是函數(shù)名本身。這個對象的類型是function。在下面的例子,我們也許不會意識到這一點,但我們實際上已經(jīng)創(chuàng)建了一個對象:它叫做Ball。
Example 1
CODE: function Ball() // 也許看起來有點奇怪,但是這個聲明 { // 創(chuàng)建了一個叫做Ball的對象 i=1; } alert(typeof Ball); // 結(jié)果 "function"
我們甚至能將這個對象的內(nèi)容打印出來而且它會輸出這個函數(shù)的實際代碼,Example2: 點擊 alert(Ball);來看看Ball的內(nèi)容。
屬性的添加
我們能夠添加給Object添加屬性,包括對象function。因為定義一個函數(shù)的實質(zhì)是創(chuàng)建一個對象。我們能夠“暗地里”給函數(shù)添加屬性。比如,我們這里定義了函數(shù)Ball,并添加屬性callsign。
CODE: function Ball() // 也許看起來有點奇怪,但是這個聲明 { // 創(chuàng)建了一個叫做Ball的對象,而且你能夠 } // 引用它或者象下面那樣給它增加屬性 Ball.callsign="The Ball"; // 給Ball增加屬性 alert(Ball.callsign); // 輸出 "The Ball"
指針
因為function是一個對象,我們能夠為一個function分配一個指針。如下例,變量ptr指向了對象myFunction。
CODE: function myFunction(message) { alert(message); } var ptr=myFunction; // ptr指向了myFunction ptr("hello"); // 這句會執(zhí)行myFunction:輸出"hello"
我們能夠運行這個函數(shù),就好像這個函數(shù)名已經(jīng)被指針名代替了一樣。所以在上面,這行ptr("hello"); 和myFunction("hello");的意義是一樣的。
指向函數(shù)的指針在面向?qū)ο缶幊讨邢喈?dāng)有用。例如:當(dāng)我們有多個對象指向同一個函數(shù)的時候(如下):
Example 4A
CODE: function sayName(name) { alert(name); } var object1=new Object(); // 創(chuàng)建三個對象 var object2=new Object(); var object3=new Object(); object1.sayMyName=sayName; // 將這個函數(shù)指派給所有對象 object2.sayMyName=sayName; object3.sayMyName=sayName; object1.sayMyName("object1"); // 輸出 "object1" object2.sayMyName("object2"); // 輸出 "object2" object3.sayMyName("object3"); // 輸出 "object3"
因為只有指針被保存(而不是函數(shù)本身),當(dāng)我們改變函數(shù)對象自身的時候,所有指向那個函數(shù)的指針都會發(fā)生變化。我們能夠在底下看到:
Example 5:
CODE:
function myFunction() { alert(myFunction.message); } myFunction.message="old"; var ptr1=myFunction; // ptr1 指向 myFunction var ptr2=myFunction; // ptr2 也指向 myFunction
ptr1(); // 輸出 "old" ptr2(); // 輸出 "old"
myFunction.message="new";
ptr1(); // 輸出 "new" ptr2(); // 輸出 "new"
出處:藍色理想
責(zé)任編輯:moby
上一頁 javascript的函數(shù) [2] 下一頁 javascript的函數(shù) [4]
◎進入論壇網(wǎng)頁制作、網(wǎng)站綜合版塊參加討論
|