2016-12-28 11 views
0

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

У меня возникли проблемы с поиском соответствующей информации для 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 
    }); 
+0

Возможный дубликат [JavaScript: функция, возвращающая объект] (http://stackoverflow.com/questions/12272239/javascript-function-returning-an-object) – Terry

ответ

0

Вы можете объявить другую переменную внутри объекта, то есть. 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 
    ); 
    } 
}; 
+0

Это идеальный вариант. Спасибо! – Angie

 Смежные вопросы

  • Нет связанных вопросов^_^