javascript的函數(5)

來源:互聯網
上載者:User

調用哪個函數?

你也許正在想命名衝突的問題。比如,下面哪一個叫做calculate的函數會被調用?

Example 8

CODE:

function calculate(number)
{
  return number/3;
}

function getHalfOf(num1, num2, num3)    
{
  function calculate(number)
  {
    return number/2;
  }

  var result="";
  result+=calculate(num1)+" ";
  result+=calculate(num2)+" ";
  result+=calculate(num3);
}        
var resultString=getHalfOf(10,20,30);
alert(resultString);         // 輸出 "5 10 15"

在這個例子中,編譯器會首先搜尋局部記憶體位址,所以它會使用內嵌的calculate函數。如果我們刪除了這個內嵌(局部)的calculate函數,這個代碼會使用全域的calculate函數。

函數:資料類型及建構函式

讓我們來看看函數的另一個特殊功能--這讓它和其它物件類型截然不同。一個函數能夠用來作為一個資料類型的藍圖。這個特性通常被用在物件導向編程中來類比使用者自訂資料類型(user defined data type)。使用使用者自訂資料類型建立的對象通常被成為使用者自訂對象(user defined object)。

資料類型

在定義了一個函數之後,我們也同時建立了一個新的資料類型。這個資料類型能夠用來建立一個新對象。下例,我建立了一個叫做Ball的新資料類型。

Example DT1

CODE:

function Ball()
{
}
var ball0=new Ball(); // ball0 現在指向一個新對象

alert(ball0);         // 輸出 "Object",因為 ball0 現在是一個對象

這樣看來,ball0=new Ball()作了什嗎?new關鍵字建立了一個類型是Object的新對象(叫做ball0)。然後它會執行Ball(),並將這個引用傳給ball0(用於調用對象)。下面,你會看到這條訊息:“creating new Ball”,如果Ball()實際上被啟動並執行話。

Example DT2

CODE:
function Ball(message)
{
  alert(message);
}
var ball0=new Ball("creating new Ball");  // 建立對象並輸出訊息
ball0.name="ball-0";                      // ball0現在有一個屬性:name
alert(ball0.name);                        // 輸出 "ball-0"

我們可以把上面這段代碼的第6行看做是底下的代碼6-8行的一個簡寫:

CODE:
function Ball(message)
{
  alert(message);
}
var ball0=new Object();
ball0.construct=Ball;
ball0.construct("creating new ball");  // 執行 ball0.Ball("creating..");
ball0.name="ball-0";                     
alert(ball0.name);        

這行代碼ball0.construct=Ball和Example 4中的ptr=myFunction文法一致。

如果你還是不明白這行的含義那就回過頭再複習一下Example 4。注意:你也許考慮直接運行ball0.Ball("..."),但是它不會起作用的,因為ball0並沒有一個叫做Ball("...")的屬性,並且它也不知道你究竟想作些什麼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.