вызов функции jQuery - PullRequest
       22

вызов функции jQuery

1 голос
/ 23 февраля 2010

У меня есть 2 функции jQuery. Один называет другой (в теории ...). Это:

$.testFunction = function(arg1){
    alert("testFunction(arg1)");
    $.testFunction(arg1, "");
}

$.testFunction = function(arg1, arg2){
    alert("testFunction(arg1, arg2)");
    alert("arg1: " + arg1 + "\narg2: " + arg2);
}

У меня есть две функции, потому что, когда у меня нет второго параметра для передачи, я бы хотел вызвать их простую версию. Но когда я звоню так:

$.testFunction("first param");
alert("Before second call");
$.testFunction("first param", "second param");

Он всегда вызывает второй и (в окне предупреждения) помещает: «testFunction (arg1, arg2)» затем «arg1: первый параметр arg2: undefined ». Почему работает так? Почему первая функция не вызывается, когда я передаю только один параметр?

Ответы [ 6 ]

2 голосов
/ 23 февраля 2010

Javascript не поддерживает перегрузку методов (по крайней мере, в традиционном смысле этого слова).

Вторая функция перезаписывает первую.

1 голос
/ 23 февраля 2010
$.testFunction = function(arg1, arg2){
    if(arg2 === null || arg2 === undefined){
        // run the first version
    }else{
        // run the second version
    }
}

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

1 голос
/ 23 февраля 2010

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

Возможно, вы захотите взглянуть на эту статью , которая может помочь с перегрузкой.

1 голос
/ 23 февраля 2010

Вы перезаписываете функцию. Javascript не имеет понятия перегруженных функций.

Вместо этого функции принимают произвольное количество параметров, и вы можете получить к ним доступ через специальное свойство arguments.

$.testFunction = function(arg1, arg2){
    if(arguments.length == 2){
        alert("arg1: " + arg1 + "\narg2: " + arg2);
    }else{
        alert("arg1: " + arg1);
    }
}
1 голос
/ 23 февраля 2010

Э-э-э - вы сразу же перезаписываете первую функцию. Вот эквивалент того, что вы делаете:

x = "foo";
x = "bar";
alert(x);  // 'bar' -- "why isn't this foo????!?!"

Хорошим вариантом было бы написать одну функцию, которая ведет себя по-разному в зависимости от количества переданных ей аргументов:

var testFunction = function(a, b) {
    if (b === undefined) {
        // no second parameter
    }
};
1 голос
/ 23 февраля 2010

В javascript нет перегрузки функций, ваша вторая функция заменяет первую.

Вы могли бы достичь чего-то подобного, осматривая объект arguments, например:

$.testFunction = function(arg1, arg2){
  if(arguments.length == 1){
   // handle one argument 
  }else if(arguments.length == 2{
   // handle 2 arguments
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...