按照我的上一个线程 ( here ),我想我已经找到了问题所在。
但是,我在试图理解为什么会发生这种情况时感到很头疼。
上下文:我有一个名为“Schedule”的对象,我在其中创建了 52 个“周”对象。每个星期都有以 MySQL 格式、JS 日期对象和标签返回开始和结束日期的函数。上一篇文章中有更多详细信息。
除了我尝试启动“EndDate”时,它工作得很好。
/* --- 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.setEndDate”两侧的警报,我可以看到每次运行“setEndDate”时“this.date”都会递增。
我不希望发生这种情况:我希望“this.date”保留为传递给周对象的日期,并且我想要一个名为“this.end_date”的单独变量,它基本上是 this.date 加上六天。
我假设这是一个引用问题。我找到了这篇文章:http://www.snook.ca/archives/javascript/javascript_pass/但说实话我不明白...:)
谁能教教我?
最佳答案
我认为这是因为您每次都将“this.date”传递给 setEndDate,所以当您运行 ret_date.setDate 时,您就是在传递给 this.date。这是因为“日期”是一个正在传递其引用的对象。
您应该可以这样更改它:
var mydate = new Date(this.date);
this.end_date = setEndDate(mydate);
现在将修改 mydate 对象,这不会影响您的代码。
更好的是,您可以根据 this.date
告诉设置的结束日期更改 this.end_date
,您不需要传递任何东西!
关于javascript - 面向对象 JS : variable passing/referencing query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432977/