關於JavaScript中函數的一些技巧

來源:互聯網
上載者:User

一、關於函數的寫法及調用

 

  (1),JavaScript函數定義在一些地方是不同於C++,.NET,JAVA等物件導向語言的,這些語言都有函數重載的概念。如:

Code
private int sum(int a,int b)
{
      return a + b;
}

private int sum(int a,int b,int c)
{
      return a + b + c;
}

private int sum(int a,int b,int c,int d)
{
      return a + b + c +d;
}

  上面的函數sum實現的是整數的相加,調用時根據輸入參數的不同決定其調用的是哪個函數。

  但是在JavaScript中函數卻不能這樣寫重載函數,這這會引起混亂。如:

Code
<script language="javascript">
function show()
{
      alert("good");
}
function show(s)
{
      alert(s);
}
function show(s,w)
{
      alert(s+w);
}
</script>
<input type="button" value="函數參數" onclick="show()" />

  按照我們的習慣思維,當show函數中不參入參數時,應該調用的是第一個函數,彈出的警告框應該是“good”,但是運行後我們就會發現警告框的內容是“NaN”,這裡系統調用的是最後一個函數,即show(s,w);當調用show('yes')時,它彈出的不是"yes",而是"yesundefined",這裡系統調用的也是最後一個函數,即show(s,w);當調用show('yes','no')時,彈出的是"yesno",這裡系統調用的還是最後一個函數,即show(s,w);當調用show('yes','no','cancel'),結果同show('yes','no')。說明後面的函數會覆蓋前面的同名函數。至於為什麼會產生這種結果,請接著往下看下面一段話,你就會明白了。。。。

  由於函數被覆蓋了,show函數定義為最後一個函數。。。而在JavaScript中,如果在函數調用時省略了參數(如show(),show('yes')),則省略的參數(s,w和w)會以undefined類型傳遞。如果在調用時提供了函式宣告所不需要的多餘參數(如show('yes','no','cancel')),多餘的參數('cancel')會被忽略。。。

 

  (2),特殊情況

   

  請看下面函數的運行 結果。

 

Code
function show()
{
      var str = "";//全域變數,要彈出的內容
      for (var i = 0; i < arguments.length; i++)
      {
            //arguments[i]為各個傳入函數的參數
            str += arguments[i];
      }
      alert(str);
}

 

   當我們調用show("偉大的","中華人民","共和國")時,會彈出“偉大的中華人民共和國”。按照上面的思路,裡面的參數應該是被JavaScript解譯器忽略掉的,但是這裡不會,因為我們在寫處理函數的時候已經做了參數處理,arguments為傳入函數的參數數組。

 

二、函式宣告的置放位置

 

   函數有兩個個存放位置

  

  1,直接放置在js檔案的最頂層  2,放置在一個對象中

 

  (1),直接放置在js檔案中非常之簡單也非常常見,調用也十分清晰。

 

//聲明
function show()
{
      alert("成功");
}

//調用
show();

   (2),在對象中寫函數其實也非常常見。由於對象分三種(1,內建對象 2,JSON對象 3,自訂對象),所以這裡也分三種情況討論。

 

  (a) ,內建對象中的函數

 

//定義
String.prototype.trim = function() 
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

//調用
var str = "  我的左右邊都有空格  ";
alert(str.trim());

 

  (b)JSON對象中的函數

 

//定義JSON對象obj中的show方法
var obj = {
      show:function(){
            alert("成功");
      }
}

//調用
obj.show();

 

   (c),自訂對象中的函數,這是JavaScript開發人員應用函數最為常見的地方

 

//定義自訂對象obj中的show函數
function obj()
{
      this.show = function()
      {
            alert("成功");
      }
}

//調用
var aaa = new obj();
aaa.show();

 

 

 

相關文章

聯繫我們

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