2012-09-19 3 views
0

이 문제가 계속 발생합니다. 그리고 지금 내가이 해결 될 수 사용하여 콜백을 생각 Date 객체변수가 동 기적으로 업데이트되지 않습니다.

var now = new Date(); 
var later = new Date(); 
later.setHours(later.getHours() + 8); 

<Wait for somthing> 
now = later; 
later.setHours(later.getHours() + 8); 

alert(now == later); //returns True 

과 관련이있다 :

var adjustTime = function(callback){ 
    now = later; 
    callback(); 
} 
adjustTime(function(){ 
    later.setHours(later.getHours() + 8); 
}); 

alert(now == later); //returns True 

나는 무엇을 이해하지? 이러한 변수를 올바르게 업데이트하려면 어떻게해야합니까?

는 편집 : 좋아, 내가 조금 더 나은 자신을 설명한다. 지금하고 싶은 것은 now 변수를 으로 업데이트하는 것입니다. 그 후에 나는 나중에 8 시간으로 늘리고 싶습니다.

+0

'무엇인가'는 무엇입니까? – Asciiom

+0

성취하려는 것을 더 설명 할 수 있습니까? – Sam

+0

JavaScript가 실제로 작동하는 것과 다른 동작을 기대하고 있다고 생각합니다. 당신이 준 예제는 전혀 JavaScript에 익숙하지 않은 사람들에게는 전혀 놀라운 일이 아닙니다. 아마 당신은 당신이 어떤 일이 일어나기를 기대했는지 그리고 왜 그 행동이 당신을 혼란스럽게하는지 설명 할 수있을 것입니다. – Pointy

답변

6

평등 비교를 그대로 단지 객체 참조 어떤지를 테스트합니다. 변수 "지금"다음

now = later; 

을하고 "나중에"같은 객체를 참조 : 그리고 어떤 경우에, 일단 당신이 이런 짓을했습니다. 그러므로 "later"에 대한 업데이트는 "now"에 대한 업데이트입니다.

Date 프로토 타입의 "setter"메서드는 모두 개체를 직접 수정합니다. 즉, Date 인스턴스는 변경할 수 없습니다.

편집 — 저는 여러분이 정말로 원하는 것이 "지금"과 "나중"을 구분하는 것입니다. "지금", 그 후

now = later; 
later = new Date(later.getTime()); 
later.setHours(later.getHours() + 8); 

그리고 당신이 Date 인스턴스에 설정 한 것이기 때문에 "나중에"동일하지 않습니다 :이 경우에 이런 일이 당신이 원하는 아마.

+0

완벽한입니다. 나는 그것이 나를 혼란스럽게하는 참조 부분이라고 생각한다. 고마워요! – kimpettersen

1

now = later; 이후의 변경 사항은 현재와 바이스 절을 반영합니다. 모두가 같은 객체를 Date 인스턴스 사이

var now = new Date(); 
    var later = new Date(); 
    later.setHours(later.getHours() + 8); 

    <Wait for somthing> 
    now = later; // now and later have refeerence of same object 
    later.setHours(later.getHours() + 8); 

    alert(now == later); //returns True 
+0

방금 ​​추가 된 주석이있는 코드 예제를 복사하여 붙여 넣었습니다. 답을 설명해 주시겠습니까? 'setHours()'를 호출하여'later'를 수정한다면, 왜 여전히 동일합니까? –

+0

업데이트에 대한 축하! :) –

관련 문제