Вызовите приватный метод из публичного метода? - PullRequest
3 голосов
/ 21 июня 2011

Я определил класс следующим образом:

function Class1(){
    this.Func1 = function(){
       /* Methods and vars */
    };

    function Func2(){
       /* Methods and vars */
    };

};

Я хочу выяснить способ вызова публичного метода (или получения значения публичной переменной) из приватной (Func2 ()). Любые предложения?

Pd: Извините, если терминология, которую я использовал, строго ориентирована на объекты, потому что я программист на C ++, и я немного новичок в программировании на JavaScript.

Ответы [ 3 ]

8 голосов
/ 21 июня 2011

С Func1 вы можете позвонить Func2 напрямую:

this.Func1 = function() {
  Func2();
};

Однако вы не можете сделать то же самое для вызова Func1 из Func2, потому что Func2 будет (вероятно) иметь другую область действия и другое определение this при его вызове; this.Func1 будет неопределенным. Как предложено ниже alx, вы можете сохранить область, используя другую переменную, которая сохранит свое значение при использовании из внутренней функции. Вы также можете сохранить ссылку на Func1 в локальной области следующим образом:

var Func1 = this.Func1 = function() {
  // fun stuff
};

function Func2() {
  Func1();
}

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

7 голосов
/ 21 июня 2011

использовать закрытие:

function Class1(){
        this.Func1 = function(){
           /* Methods and vars */
        };

        var me = this;

        function Func2(){
           me.Func1();
        };

    };
0 голосов
/ 21 июня 2011

объявленный в той же области видимости, публичный метод знает о закрытом, поэтому вы можете просто вызвать его:

function Object1(){
    this.publicMethod = function(){         
        alert("I'm a public method ;)");
    };
    var that = this;
    function privateMethod(){
        return that.publicMethod.apply(that,arguments);
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...