могу ли я вызвать частную функцию из того же объекта javascript

ETA: я не думаю, что этот вопрос является дубликатом связанного. Я знаю, как вернуть приватную переменную (как показано ниже в коде), этот вопрос был о том, как вызвать приватную функцию внутри того же объекта.

У меня возникли проблемы с поиском соответствующей информации конкретно для javascript. У меня есть объявленный объект, и внутри этого объекта я объявил четыре функции (три, которые являются объектными методами, и одна, которая не является). Я хочу сделать четвертую объектным методом, чтобы я мог вызывать его отдельно от jquery (timer.displayTime (); ), но когда я это делаю, использование startIntervalTimer функции перестает работать. Возможно ли то, что я пытаюсь сделать?

var startStopTime = function() {

 //This function is currently called inside startIntervalTimer(); 
 function displayTime() {
    //Display correct time
  };

//I WANT SOMETHING LIKE THIS INSTEAD BUT (SEE startIntervalTimer)
this.displayTime = function() {
//Display correct time
}

  var intervalTimer; 
  this.startIntervalTimer = function() {
    console.log(timeSetMS);
    intervalTimer = setInterval(function() {
      if(timeSetMS > 0) {
       timeSetMS -= 1000;
      displayTime(); //THIS IS WHERE AND HOW IT IS CALLED
      this.displayTime(); //THIS IS WHAT I'M GOING FOR, BUT IT WON'T WORK
      console.log(timeSetMS); 
      } else if(timeSetMS <= 0) {
        clearInterval(intervalTimer);
        console.log("timer stopped");
      }  
    }, 1000
    );
  }   
};

а затем в jquery у меня есть:

var timer = new startStopTime();
$("#timer-container,  #timer-label").click(function() {
    if(power == "off") {
      power = "on"; 
      timer.startIntervalTimer();
    } else if (power == "on") {
      power = "off";
      timer.stopTimer();
    }
   });

//I want to add this, below

$("#session-length").click(function() {
    //Change the display
    timer.displayTime();
    displayTime(); // This won't work obviously because it's out of scope
  });

person Angie    schedule 28.12.2016    source источник
comment
Возможный дубликат JavaScript: функция, возвращающая объект   -  person Terry    schedule 28.12.2016


Ответы (1)


Вы можете объявить другую переменную внутри объекта, т.е. self:

var startStopTime = function() {
  //declare self
  var self = this;

  this.displayTime = function() {
  //Display correct time
  }

  var intervalTimer; 
  this.startIntervalTimer = function() {
    console.log(timeSetMS);
    intervalTimer = setInterval(function() {
      if(timeSetMS > 0) {
       timeSetMS -= 1000;
      displayTime(); 
      self.displayTime(); // use self instead
      console.log(timeSetMS); 
      } else if(timeSetMS <= 0) {
        clearInterval(intervalTimer);
        console.log("timer stopped");
      }  
    }, 1000
    );
  }   
};
person AJ X.    schedule 28.12.2016
comment
Это потрясающе. Спасибо! - person Angie; 28.12.2016