2014-12-04 2 views
1

В настоящее время я использую следующую функцию, которая проверяет три параметра, чтобы проверить, есть ли какие-либо пропущенные пути, является ли это лучшим способом для этого, задав значение по умолчанию, если ни один параметр не был отправлен?Функции JavaScript с параметрами по умолчанию

function setupSlideshow(t, e, s) { 
    e = e || '.slideshow'; 
    s = s || '> li'; 
    t = t || 70; 
    $timeout(function() { 
     $(e).cycle({ 
      swipe: true, 
      slides: s, 
      fx: 'scrollHorz', 
      pager: '.cycle-pager', 
      timeout: 0 
     }); 
    }, t); 
} 

С помощью setupSlideshow(70); это устанавливает свой тайм-аут, чтобы 70 мс, но когда дело доходит до установки элемента, то с помощью setupSlideshow('.new-slideshow'); не работает.

setupSlideshow(70); 
setupSlideshow('.new-slideshow'); 
setupSlideshow('.new-slideshow','.slide'); 
+0

Есть ли у вас какие-либо вопросы или комментарии, или же один из наших ответов вам помочь? Приветствуется обратная связь или принятие ответа. – Bill

ответ

2

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

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

function setupSlideshow(options) { 
    options = options || {}; 
    e = options.e || '.slideshow'; 
    s = options.s || '> li'; 
    t = options.t || 70; 
    $timeout(function() { 
     $(e).cycle({ 
      swipe: true, 
      slides: s, 
      fx: 'scrollHorz', 
      pager: '.cycle-pager', 
      timeout: 0 
     }); 
    }, t); 
} 
setupSlideshow({t:70}); 
setupSlideshow({e:'.new-slideshow'}); 
setupSlideshow({e:'.new-slideshow',s:'.slide'}); 

Используя этот метод полезен для такого рода использования, но может стать проблемой производителем тоже, когда слишком много вариантов, возможны и не хорошо документированы, так что держите его в чистоте и прокомментируйте :)

1

Параметры должны быть переданы функции в том же порядке, в котором они определены. Так;

setupSlideshow('.new-slideshow'); 

Параметр здесь передается переменной t в функции.

Что вы хотите сделать это:

setUpSlideshow(false, '.new-slideshow', '.slide'); 

это будет проходить false переменной t, и она будет переодеваться к вашему значению по умолчанию.

В качестве альтернативы, вы можете рассмотреть возможность использования объекта Ань опций '/ «Аргументы» ...:

function setupSlideshow(args) { 
    e = e in args ? args.e : '.slideshow'; 
    s = s in args ? args.s : '> li'; 
    t = t in args ? args.t : 70; 
    ... 
} 
args = { 
    e: '.new-slideshow', 
    s: '.slide' 
}; 

setupSlideshow(args); 
0

Что касается моего ограниченного JS, я думаю, у меня есть этот.

В настоящее время вы пишете e = e || '.slideshow';, вы пытаетесь получить доступ к e как переменная, однако браузер интерпретирует это как аргумент. Измените его на следующее:

var e = e || '.slideshow', s = s || '> li', t = t || 70;

+0

Нет, эта часть в порядке.То, что он делает, это оценить значение «e», если оно истинно, его значение присваивается другому, а правая часть будет оцениваться как true, а затем будет использоваться как значение для назначения. – Salketer

0

Посмотрите на приведенные ниже реализациях. При использовании функций params 'features = []' на месте код может быть сделан очень кратким в ES6.

ES6: новый

function setUserAccess(features = []){ 
    return features; 
}; 

setUserAccess(); // [] 

ES5: старый

function setUserAccess(features){ 
    features = features || []; 
    return features; 
}; 

setUserAccess(); // []