Javascript: выявление шаблона модуля. Доступ к закрытым членам

у меня есть библиотека javascript, раскрывающая свои элементы с помощью «Шаблон раскрытия модуля». У меня есть особая потребность, когда мне нужно получить доступ к его Private Member. Может ли кто-нибудь помочь мне в этом отношении? Любые советы и рекомендации? Я очень признателен, если кто-то может пролить свет на это. Заранее спасибо.

Выявление шаблона модуля, Эдди Османи

var myRevealingModule = (function () {

    var privateVar = "Ben Cherry",
        publicVar = "Hey there!";

    function privateFunction() {
        console.log( "Name: " + privateVar );
    }

    function publicSetName( strName ) {
        privateVar = strName;
    }

    function publicGetName() {
        privateFunction();
    }


    // Reveal public pointers to
    // private functions and properties

    return {
        setName: publicSetName,
        greeting: publicVar,
        getName: publicGetName
    };

})();

myRevealingModule.setName( "Paul Kinlan" );
myRevealingModule.getName();

// is there anyway to access 'privateFunction'????

Есть ли способ получить доступ к 'privateFunction'????

Любые советы и рекомендации? Я очень признателен, если кто-то может пролить свет на это. Заранее спасибо.


person Jagan    schedule 14.07.2015    source источник


Ответы (1)


Вы создаете объект myRevealingModule, который содержит setName, greeting и getName. Из них setName ссылается на publicSetName, а getName ссылается на publicGetName. В свой ход publicGetName делает именно то, что вам нужно: вызывает privateFunction.

Итак, чтобы ответить на ваш вопрос:

myRevealingModule.publicGetName();

как вы получаете доступ к privateFunction. Вы даже можете изменить значение privateVar таким образом:

myRevealingModule.publicSetName("foobar");
myRevealingModule.publicGetName();
person Lajos Arpad    schedule 14.07.2015
comment
Как я упоминал в описании, методы класса доступны из сторонней библиотеки. В любом случае, я могу вызвать privateFunction()? Что-то вроде этого myRevealingModule.privateFunction() - person Jagan; 14.07.2015
comment
Насколько я знаю, нет никакого способа, если вы не сделаете отражение, но для этого вам нужен прототип. (htmlgoodies.com/tutorials/web_graphics/) . Почему вам не нравится вызывать publicGetName? - person Lajos Arpad; 14.07.2015
comment
На самом деле приведенная выше реализация класса myRevealingModule является просто примером. Фактическая реализация из библиотеки js отличается. В любом случае, спасибо @Lajos Arpad. - person Jagan; 14.07.2015