раскрытие шаблона модуля (javascript) - это не может получить доступ к закрытым методам

: У меня есть класс javascript, написанный в «шаблоне раскрытия модуля»:

myObject = function () {
    var varA,
        varB,

        methodA = function (data) {

            //Some code...
        },
        methodB = function (data) {
             var that = this;
             that.methodA("a"); // --> 'that' recognize only public methods: 'methodB' / 'methodC' !!!
        },
        methodC = function (data) {

        };
        return {
            methodB : methodB,
            methodC : methodC,
         };
} ();

как вы можете видеть в «этом» внутри «methodB» не распознает частные методы класса.

Изменить: я намеревался вызвать вспомогательный закрытый метод из открытого класса. В этом частном классе мне нужно было «это». Если я вызываю 'methodA("a")' непосредственно из 'methodB' (без 'that'), у меня нет 'this' ('this' будет глобальным контекстом). Решение будет:

methodA.call(this, "a");

person Yaniv Efraim    schedule 17.06.2012    source источник
comment
Попробуйте прочитать эту статью. Это может помочь вам лучше понять шаблон: yuiblog.com/ блог/2007/06/12/модуль-шаблон   -  person Mihai Todor    schedule 17.06.2012
comment
Что, черт возьми, ты пытаешься здесь сделать??? А в чем вопрос? Вы пытаетесь сделать что-то подобное этому?   -  person gdoron is supporting Monica    schedule 17.06.2012
comment
Короче говоря: memberA не является ключом в вашем объекте. Это просто переменная внутри конструктора (поэтому ее можно назвать частной).   -  person madfriend    schedule 17.06.2012


Ответы (1)


Во-первых, у вас ошибка

return {
    methodB = methodB,
    methodC = methodC,
}

Так должно быть

 return {
    methodB : methodB,
    methodC : methodC
}

В вашем примере у вас есть

methodB = function (data) {
         var that = this;
         that.methodA("a");
    }

that=this и ключевое слово this относится к текущему объекту, и вы вернули объект с methodBиmethodC, но в вашем объекте у вас нетmethodAпоэтому that.methodA("a")не работает внутриmethodBпотому чтоmethodAне является частью вашего текущего объекта, но если вы написали его как

methodB = function (data) {
    methodA("a");
}

Тогда бы побежал.

that=thisиthis=myObjectиmyObjectимеет только два метода methodBиmethodC, поэтому that.methodA("a") означает, что myObject.methodA("a") не должен выполняться, поскольку его нет в myObject

DEMO-1 и DEMO-2

person The Alpha    schedule 17.06.2012