Как String.concat () реализуется в JavaScript? - PullRequest
1 голос
/ 09 июля 2011

В функции .concat() я могу передать ей произвольное количество аргументов.

Я понимаю перегрузку функций в C ++, но я не знаю, как реализовать функцию с неизвестным количеством аргументов в JavaScript.

Как реализовать произвольное количество аргументов для функции?

Ответы [ 6 ]

1 голос
/ 09 июля 2011

Вот так -

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");

, поэтому в обоих случаяхЯ передавал переменное число идентификаторов полей в функцию, и она проверила, были ли эти поля пустыми.Если все они содержали какое-то значение, то это переключало видимость кнопки.

1 голос
/ 09 июля 2011

Вы можете сделать это, используя объект arguments. Смотрите примеры и документацию здесь: https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments

1 голос
/ 09 июля 2011

В javascript вы должны использовать встроенный параметр «arguments», который представляет собой массив всех аргументов, переданных функции. Вы можете получить его длину с arguments.length и каждым значением из аргументов массива [0], arguments [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"
0 голосов
/ 09 июля 2011

Любая функция javascript может иметь произвольное количество аргументов.Если выполнение функции зависит от количества или конкретных качеств его arguments, вам придется проверить объект arguments, который можно повторять как объект типа «массив», как показали другие.

В некоторых случаях может быть удобно преобразовать аргументы в реальный массив, используя что-то вроде
var args = Array.prototoype.slice(arguments).

Вот запись в блоге от ДжонаСтраница Resigs о перегрузке методов, которая может вас заинтересовать.

0 голосов
/ 09 июля 2011

Вы можете использовать массив 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 голосов
/ 09 июля 2011

Вот так - используйте объект аргументов все функции доступны:

function someFunction() {
  for (var i=0,n=arguments.length;i<n;i++) {
    // do something with arguments[i];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...