2016-12-28 7 views
0

ETA :이 질문은 링크 된 것과 중복 된 것 같습니다. 개인 변수를 반환하는 방법을 알고 있습니다 (아래 코드 참조).이 질문은 같은 개체 내에서 개인 함수를 호출하는 방법에 대한 것입니다.동일한 개체 내에서 private 함수를 호출 할 수 있습니까?

javascript 관련 정보를 찾는 데 문제가 있습니다. 나는 선언 된 객체를 가지고 있고 그 객체 내에 네 개의 함수 (객체 메소드 3 개와 그렇지 않은 것)를 선언했다. 네 번째 객체 메소드를 객체 메소드로 만들어서 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

가능한 복제 [자바 스크립트 : 함수가 객체를 반환은] (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