Javascript Рефакторинг, следуя методу DRY - Как бы вы клонировали параметры, переданные в плагин? - PullRequest
0 голосов
/ 22 февраля 2020

Поскольку я пытаюсь следовать шаблону DRY, как кто-то может сделать что-то подобное? (но правильный путь)?

const lazyObj = {
  bind: 'event',
  effect: 'fadeIn',
  effectTime: 500,
  threshold: 0
}

$('.js-lazy, .js-lazy-homepage').lazy(lazyObj);

$('.js-other-lazy').lazy({
  ...lazyObj,
  beforeLoad: function() {
    $('.js-skeleton').hide();
  }
})

По сути, хотелось бы переписать это:

$('.js-lazy, .js-lazy-homepage').lazy({
  bind: 'event',
  effect: 'fadeIn',
  effectTime: 500,
  threshold: 0
});

$('.js-other-lazy').lazy({
  bind: 'event',
  effect: 'fadeIn',
  effectTime: 500,
  threshold: 0,
  beforeLoad: function() {
    $('.js-skeleton').hide();
  }
})

Поскольку я использую те же значения:

{
  bind: 'event',
  effect: 'fadeIn',
  effectTime: 500,
  threshold: 0
}

1 Ответ

1 голос
/ 22 февраля 2020

Вы можете расширять и возражать против другого. https://api.jquery.com/jQuery.extend

var primary = {
  bind: 'event',
  effect: 'fadeIn',
  effectTime: 500,
  threshold: 0
};

var secondary = jQuery.extend(
  { beforeLoad: function() { $('.js-skeleton').hide(); } },
  primary
);

console.log(primary);
console.log(secondary);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
...