создание функции, которая имеет дело с необязательными параметрами - PullRequest
2 голосов
/ 19 августа 2011

Я нашел этот код в Jquery в действии:

function complex(p1,options) {
            var settings = $.extend({
                options1: devaultVal1,
                options2: devaultVal2,
                options3: devaultVal3,
                options4: devaultVal4,
                options5: devaultVal5,
            },options||{});
            //remainder of function definition..
        };

Я не понимаю три вещи об этом шаблоне:

  1. Функция $.extend() сливаетсяпараметр options с первым параметром объекта.Если бы я передавал необязательный параметр при вызове complex(), как бы он связался с этим объектом?

  2. Почему создается объект settings?Какой цели это служит?

  3. Какова цель оператора ИЛИ?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 19 августа 2011
  1. Целью указанных опций является предоставление значений по умолчанию. Если вы укажете один из них, то предоставленное вами значение переопределит то, что есть по умолчанию.

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

  3. Параметр or предназначен для предотвращения ошибки, если параметры указаны как нулевые. В нем говорится, что использовать параметры, если оно пустое, использовать пустой литерал объекта.

Давайте рассмотрим несколько примеров:

  function complex(p1,options) {
    var settings = $.extend({
    option1: "val1",
    option2: "val2"
  },options||{});

  console.log(settings);
};



complex("P1 Value");  //settings = {option1: "val1", option2: "val2"}

complex("P1 Value", {option1: "newval"});  //settings = {option1: "newval", option2: "val2"}

complex("P1 Value", {option1: "newval", option2: "newval"});  //settings = {option1: "newval", option2: "newval"}

complex("P1 Value", {option3: "Third?!"});  //settings = {option1: "newval", option2: "newval", option3: "Third?!"}

Вот jsfiddle, который регистрирует значения. http://jsfiddle.net/8G9PJ/

0 голосов
/ 19 августа 2011
  1. Все параметры, которые будут использоваться в options, заменят те же параметры из настроек по умолчанию
  2. Объект setting создать, чтобы установить все настройки в этой функции в одно место
  3. options||{} означает, что если опция установлена ​​и имеет значение true, возвращает options, возвращает {} в обратном порядке. Так что это то же самое, что и if(!options) options={} до этого утверждения;
0 голосов
/ 19 августа 2011

2) Объект settings создан для хранения всех настроек вашей функции.Это обеспечивает все значения по умолчанию, но может быть переопределено путем передачи объекта в качестве второго параметра в функцию complex().

1) Любые ключи, найденные в необязательном объекте параметра options, будут переопределять этот ключ внастройки по умолчанию.Таким образом, вы можете передать объект, содержащий только те настройки, которые вы хотите изменить.

3) Оператор or устанавливает, что второй параметр, переданный $.extend(), является объектом.Если options не определено (потому что вы не передали его), оно все равно отправит объект на $.extend().

0 голосов
/ 19 августа 2011

a) $ .extend в основном означает, что если вы передаете объект json, который переопределяет параметры по умолчанию, задайте эти значения для свойств.если вы передадите {options1: "1", options3: "3"}, то у ваших настроек будут эти два параметра переопределены значениями, которые вы передали

b) settings - это конечный объект настроек, который будетиспользуется библиотекой.поэтому ваша библиотека в основном будет обращаться к settings.options1 settings.options2 везде, где это необходимо, и к nt defaultVal1, defaultVal2, если они являются свойствами.

c) если не заданы параметры, т.е. параметры не определены, то не сбрасывать значения по умолчанию.В основном, функция расширения работает в том, что она просматривает имена proprty по умолчанию, проверяет, есть ли у параметров json эти свойства, если да, то сбросить их, иначе нет.теперь, если вы передадите неопределенное значение, это потерпит неудачу, следовательно, {}

...