2011-09-15 6 views
1

마지막 스레드 (here) 다음으로 문제를 지적했습니다.OOP JS : 변수 전달/조회 쿼리

그러나 나는 이것이 왜 발생하는지 이해하려고 애 쓰고 있습니다.

컨텍스트 : "52"주간 개체를 만드는 "일정"이라는 개체가 있습니다. 매주 MySQL의 시작 날짜와 종료 날짜, JS 날짜 Object 및 레이블을 반환하는 함수가 있습니다. 이전 게시물의 자세한 내용.

"EndDate"를 시작하려는 경우를 제외하고는 완벽하게 작동합니다. 경고 중 하나 "this.setEndDate"인 실행의 측면을 사용하여

/* --- LEAP.Schedule.week Object --- */ 

LEAP.Schedule.week = function(n_date, n_week){ 

    this.week = n_week; 

    this.date = n_date; 

    this.year = this.date.getFullYear(); 

    this.month = this.date.getMonth(); 

    this.month += 1; 

    this.day = this.date.getDate(); 

    alert("BEFORE " + this.date.getDate()); 

    this.end_date = this.setEndDate(this.date); 

    alert("AFTER " + this.date.getDate()); 

}; 

LEAP.Schedule.week.prototype.setEndDate = function(date) { 

    var ret_date = date; 

    ret_date.setDate(ret_date.getDate() + 6); 

    return(ret_date); 

} 

, 나는 "this.date"는 "setEndDate"가 실행되고마다 증가되고 있음을 알 수있다.

필자는 "this.date"를 주 Object로 전달되는 날짜로 유지하고 싶습니다. 기본적으로 this.date라는 별개의 변수 인 "this.end_date"를 원합니다. 플러스 6 일.

나는 이것이 참조하는 것으로 추측하고 있습니다. 나는이 기사를 찾았다 : http://www.snook.ca/archives/javascript/javascript_pass/ 그러나 진실은 나는 그것을 이해하지 않는다고 들었다. .. :)

누군가 나를 계몽시킬 수 있었느냐?

답변

2

나는 당신이 당신이 this.date을하고있는 ret_date.setDate 실행 그렇게 할 때, 당신은 setEndDate 각각의 시간을 통해 "this.date"를 통과하고 있기 때문에 생각합니다. 이는 "날짜"가 참조가 전달되는 객체이기 때문입니다.

당신은 같은 변경 할 수 있어야한다 :

var mydate = new Date(this.date); 
this.end_date = setEndDate(mydate); 

MyDate가 객체가 이제 수정됩니다, 코드에 영향을주지 것이다.

this.date을 기준으로 설정 종료일을 this.end_date으로 변경하면 아무 것도 전달하지 않아도됩니다.

+0

코스 중! 나는 내가 옳은 선상에 있다는 것을 알았다. 나는 그저 내 머리를 잡을 수 없었다. 정말 고마워요! – dunc

2

옙;

var ret_date = date; 

ret_date는 함수로 전달 될 때 자체 this.date이다 date에 대한 참조는, 그 참조로 전달한다.

복사 & 반환합니다.

LEAP.Schedule.week.prototype.setEndDate = function(date) { 
    var ret_date = new Date(date.getTime()); 
    return ret_date.setDate(ret_date.getDate() + 6); 
} 
+0

대단히 감사합니다. – dunc

+0

그들은 둘 다 참조입니다. – newacct