Расширение параметров плагинов jQuery по умолчанию для пользователя

0

В следующей демонстрации: что происходит в этой строке кода?

settings = $.extend({}, defaultSettings, settings || {});

В чем разница между вышеуказанным и этим:

    if(settings){
    settings = $.extend(defaultSettings, settings);
}

==================================

(function($){
    var defaultSettings = {
        mode            : 'Pencil',
        lineWidthMin    : '0',
        lineWidthMax    : '10',
        lineWidth       : '2'
    };

    $.fn.wPaint = function(settings)
    {
        settings = $.extend({}, defaultSettings, settings || {});

        return this.each(function()
        {
            var elem = $(this);

            //run some code here
        });
    }
})(jQuery);
  • 0
    Прочитайте документы: api.jquery.com/jquery.extend
  • 0
    что означает эта конструкция? настройки || {} = что поставляется в плагин или если ничего не было предоставлено?
Показать ещё 2 комментария
Теги:
plugins
closures

1 ответ

2
Лучший ответ
settings = $.extend({}, defaultSettings, settings || {});

Метод jQuery $.extend() копирует свойства из одного или нескольких объектов друг в друга, справа налево. В этом конкретном примере методу передаются три объекта: {} (пустой объект), defaultSettings и затем settings (или пустой объект, если settings не существуют). Итак, переходя справа налево, все свойства настроек будут скопированы в defaultSettings а затем результат будет скопирован в пустой объект ({}). Результатом всего этого является то, что свойства в settings (которые являются пользовательскими параметрами пользователя) будут иметь приоритет перед defaultSettings по defaultSettings а затем все они будут скопированы в пустой объект. Причина для пустого объекта заключается в том, что $.extend() фактически модифицирует первый аргумент по ссылке, поэтому передача в пустой объект, поскольку первый объект по существу делает клон без изменения какого-либо объекта.

if(settings){
    settings = $.extend(defaultSettings, settings);
}

Это делает то же самое, за исключением того, что вместо замены settings пустым объектом, если он не существует, он просто не выполняет заданный код.

ОБНОВЛЕНИЕ: Что касается settings || {} settings || {}, это означает использование объекта настроек, если он существует (технически, если он правдивый) ИЛИ использовать пустой объект. Это позволяет избежать передачи undefined.

  • 0
    Что касается вашего ОБНОВЛЕНИЯ - передача значения undefined ничего не меняет в объединенном / конечном объекте, так что settings || {} не требуется
  • 0
    @Ian: Вы правы, но я здесь не для того, чтобы судить об эффективности представленного кода. Согласно заданному вопросу, я просто объясняю ОП, что означает / делает каждый кусок кода, независимо от его мудрости.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню