Возврат нескольких вызовов методов из другого метода в JavaScript, раскрывающий шаблон модуля - PullRequest
0 голосов
/ 04 апреля 2011

Я экспериментирую с шаблоном раскрывающегося модуля для текущего проекта.

У меня есть init методы в верхней части нескольких методов, где я устанавливаю переменные и вызываю методы, необходимые для модулейчтобы правильно функционировать, когда они вызываются соответствующими обработчиками событий.

У меня есть метод init , который в настоящее время выглядит следующим образом:

function init(elem) {
    var width, 
    height,  
    tipHeight, 
    tipWidth, 
    topMargin, 
    leftMargin;

    return appendTip();
};

Так что это возвращает вызовк методу appendTip.

В другом модуле установка выглядит следующим образом:

    function init() {
        var width = 0,
        $siteNavListElem = $('.nav-SiteNav .nav-list > li'),
        $subNav = $('.subNav > li > ul');

            appendSubNav();
        getWidth();
};

Итак, теперь есть два вызова отдельных методов.Этот код работает нормально, но интересно, может ли он быть более аккуратным?

Как я могу вернуть оба из них?Является ли возвращение их лучшим способом позвонить им?

Спасибо.

1 Ответ

1 голос
/ 04 апреля 2011

На самом деле я не уверен, что вы вообще следуете шаблону разоблачающего модуля.Шаблон объясняет возвращение открытого объекта, который содержит открытый интерфейс вашего объекта.Таким образом, возврат функции изнутри функции на самом деле не составляет этот шаблон.Для этого шаблона вы собираетесь делать что-то вроде этого

 function revealingPattern = function(){
    var privateVar = 1;
    function prviateFunction(){
    //.....
    }

    function publicFunction(){
    //code
    }

    function pubFunction2()[
    //code
    }
    var publicVariable = 2;

    return{
     pubFunction1:publicFunction
    ,pubFunction2:pubFunction2
    ,pubVariable:publicVariable
    };
    }()

//use as
revealingPattern.pubFunction1();

По сути, все, что вы возвращаете из инкапсулирующей функции (revealingPattern), это анонимный объект, который содержит именованные свойства, которые являются открытым интерфейсом объекта revealingPattern, которыйвам разрешено использовать.

Однако моя проблема с этим шаблоном в том, что он не сообщает вам, является ли свойство в возвращаемом объекте функцией или переменной!

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

...