Функция Prive в JS доступ к переменным - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть функция JS со структурой

 function myFunc (method){
      this.type = method;
      this.border = '20';
      this.add = function(){
           // some codes
           privateFunc();
      }

      var privateFunc = function(){
           //my private function
      }
  }

Проблема в том, что у закрытой функции нет доступа ни к одной из переменных (this.type, this.border). Они не определены внутри него! Почему бы и нет?! Как у меня там есть приватная функция с доступом к переменным?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2012

Просто ради полноты

 function myFunc (method){ 
      this.type = method; 
      this.border = '20'; 
      // take a reference to the current object
      var self = this;
      this.add = function(){ 
           // some codes 
           privateFunc(); 
      } 

      var privateFunc = function(){ 

           //now you can access your members via self variable
           self.border = 10;
      } 
  } 

Ключом здесь является использование замыкания.

1 голос
/ 07 февраля 2012

Значение this отличается внутри privateFunc (это будет глобальный объект, а не экземпляр).

Самое прямое решение - заставить значение this внутри privateFunc равным значению myFunc, используя .bind:

var privateFunc = function() {
  //my private function
}.bind(this);

Для более старых браузеров доступны прокладки для .bind.

0 голосов
/ 07 февраля 2012

Кажется, работает отлично для меня:

function myFunc(method) {
    this.type = method;
    this.border = '20';
    this.add = function() {
        // some codes
        privateFunc();
    }

    var privateFunc = function() {
        alert(this.type);
    }

    privateFunc();
}

myFunc('hello')

Скрипка: http://jsfiddle.net/maniator/4qnaH/

...