Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   плагин, создание, jQuery (https://javascript.ru/forum/events/46832-plagin-sozdanie-jquery.html)

DeUM 25.04.2014 19:53

плагин, создание, jQuery
 
Доброго всем!
Создаю плагин на jQuery и столкнулся с проблемой при создании
$.myPlug = function(opts) {
var o = $.extend({
default1 : false,
default2 : true
}, opts);
console.log(default1+"|"+default2);
}

потом запускаю...
$.muPlug({default1 : true, default2 : false});
$.muPlug({default1 : false, default2 : true});

В логе почему-то указываются стандартные параметры и не меняются:
false|true
false|true

Где я неправ?
ps:
Кстати выставляю:
...
speed: 333,  //скорость анимации
...

А она меняется.

Makarov 25.04.2014 23:56

Вероятно Вы неправы в своем представлении как работает extend.

Во-первых, насколько я понимаю, ваш код в сферическом вакууме отработать не должен, а должен ругнуться на строчку с консоль логом что default1 и default2 undefined - их присвоили где-то в другом месте, а вот эти постоянные false|true - это побочный эффект, приведенный код на них не влияет. По крайней мере когда я попытался создать фидл и посмотреть, произошло именно так)

Во-вторых, extend согласно документации - это просто мержилка всех объектов которые передали, в тот объект, который передан первым параметром. Просто если параметр один, она считает это укороченной формой записи и мержит его в $.
То есть чтобы записать в пространство $ результат мержа, а насколько я понял вы хотите этого, надо написать $.extend($,obj1,obj2);

Впрочем я совсем не жукверист, могу ошибаться =)

DeUM 26.04.2014 08:11

Makarov,
Вот мой вариант кода:
$.slide_ = function(o) { // и вот в чем странность...
        var o = $.extend({
            obj: '', // эти...
            objBody: '', // данные...
            objClick: '', // меняются
            activeClick: false, // "этот" нет
            objActive: true, // а это работает о_О
            onOpen: function(){},
            onClose: function() {},
            speed: 300
        }, o);
    }

В общем похоже "activeClick" "загажен".


Часовой пояс GMT +3, время: 15:34.