2011-07-09 39 views
1

函數.concat(),我可以傳遞任意數量的參數給它。String.concat()如何在JavaScript中實現?

我明白C++中的函數重載,但我不知道如何在JavaScript中實現具有未知數量參數的函數。

如何爲函數實現任意數量的參數?

+0

你能詳細說明你的問題嗎? –

+0

@mahesh,看我的編輯。 – Blender

+0

嘆了口氣,我只是浪費了第一篇文章糾正拼寫錯誤的帖子,現在Blender甚至擺脫了編輯。星期六早上不是一個好開始...... – mplungjan

回答

1

在JavaScript中,您可以使用名爲「arguments」的內置參數,它是傳遞給函數的所有參數的數組。您可以使用arguments.length和數組參數[0],參數[1]等中的每個值來獲取它的長度......每個函數都有這個可以使用的內置變量。

例如,連接所有傳遞給它的字符串的函數。

function concatAll() { 
    var str; 
    for (var i = 0 ; i < arguments.length; i++) { 
     str += arguments[i]; 
    } 
    return(str); 
} 

var f = concatAll("abc", "def", "ghi"); // "abcdefghi" 
1

這樣的 -

function f() 
{ 
    var i; 

    for(i=0; i<arguments.length; i++) 
    { 
     alert((i+1) + "th argument: " + arguments[i]); 
    } 
} 

所有的JavaScript函數有一個名爲arguments一個內置的參數,它是一個包含所有傳遞給函數的函數參數數組。只需遍歷這個數組,你就可以訪問函數的所有參數。

作爲一個例子,一旦我寫了一個函數,如果某些特定的字段不是空的,它就會啓用/禁用某個按鈕。我寫這個函數這樣 -

function toggleButton()  // I used jquery inside this function 
{ 
    var i; 
    var last = arguments.length-1; 

    for(i=0; i<last; i++) 
    { 
     if($.trim($(arguments[i]).val()) === "") 
      return false; 
    } 

    $(arguments[last]).toggle(); 

    return true; 
} 

,並調用此函數這樣的 -

toggleButton("#idOfFirstField", "#idOfSecondField", "#idOfButtonToToggle"); 

或這樣的 -

toggleButton("#idOfFirstField", "#idOfSecondField", "#idOfThirdField", "#idOfButtonToToggle"); 

因此,在這兩種情況下,我經過可變數量字段id到該函數,並檢查這些字段是否爲空。如果它們都包含一些值,那麼它會切換按鈕的可見性。

0

這樣的 - 使用arguments object,所有功能都可用:

function someFunction() { 
    for (var i=0,n=arguments.length;i<n;i++) { 
    // do something with arguments[i]; 
    } 
} 
0

可以使用arguments數組訪問沒有正式的函數內聲明的參數:

function printArguments() { 
    for (i = 0; i < printArguments.arguments.length; i++) 
    document.writeln(printArguments.arguments[i] + '<br />'); 
} 

printArguments(1, 2, 3, 'etc'); 

來源:http://www.irt.org/articles/js008/

+0

哈哈 - 你太晚了,但至少它是來自我曾經是JS編輯器的網站的帖子。很高興看到1997年的代碼仍然有效 – mplungjan

0

任何javascript函數都可以有任意數量的參數。如果函數的執行取決於它的數量或特定質量,則需要檢查arguments對象,像其他人所示的那樣,該對象可以像「Arraylike」對象一樣迭代。

在某些情況下,可以很方便的參數轉換爲真正的數組,使用類似
var args = Array.prototoype.slice(arguments)

這是來自John Resigs的關於方法重載的一個blog entry,您可能會感興趣。