javascript的函數(3)

來源:互聯網
上載者:User

函數:對象

函數是javascript中的一種特殊形式的對象。它是第一個[b〕類資料類型(class data type)。這意味著我們能夠給它增加屬性。這裡有一些需要注意的有趣觀點:

對象的建立

就像剛才提及的,當我們定義一個函數時,javascript實際上在後台為你建立了一個對象。這個對象的名稱就是函數名本身。這個對象的類型是function。在下面的例子,我們也許不會意識到這一點,但我們實際上已經建立了一個對象:它叫做Ball。

Example 1

CODE:
function Ball()       // 也許看起來有點奇怪,但是這個聲明
{                     // 建立了一個叫做Ball的對象
  i=1;
}                    
alert(typeof Ball);     // 結果 "function"

我們甚至能將這個對象的內容列印出來而且它會輸出這個函數的實際代碼,Example2: 點擊 alert(Ball);來看看Ball的內容。

屬性的添加

我們能夠添加給Object添加屬性,包括對象function。因為定義一個函數的實質是建立一個對象。我們能夠“暗地裡”給函數添加屬性。比如,我們這裡定義了函數Ball,並添加屬性callsign。

CODE:
function Ball()       // 也許看起來有點奇怪,但是這個聲明
{                     // 建立了一個叫做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");         // 這句會執行myFunction:輸出"hello"

我們能夠運行這個函數,就好像這個函數名已經被指標名代替了一樣。所以在上面,這行ptr("hello"); 和myFunction("hello");的意義是一樣的。

指向函數的指標在物件導向編程中相當有用。例如:當我們有多個對象指向同一個函數的時候(如下):

Example 4A

CODE:
function sayName(name)
{
  alert(name);
}
var object1=new Object();      // 建立三個對象
var object2=new Object();
var object3=new Object();
object1.sayMyName=sayName;       // 將這個函數指派給所有對象
object2.sayMyName=sayName;
object3.sayMyName=sayName;
 
object1.sayMyName("object1");    // 輸出 "object1"
object2.sayMyName("object2");    // 輸出 "object2"
object3.sayMyName("object3");    // 輸出 "object3"

因為只有指標被儲存(而不是函數本身),當我們改變函數對象自身的時候,所有指向那個函數的指標都會發生變化。我們能夠在底下看到:

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"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.