javascript - 面向对象 JS : variable passing/referencing query

标签 javascript oop reference pass-by-reference

按照我的上一个线程 ( 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/

相关文章:

c++ - 尝试分配输出以查看指针和引用输出时,未命名类型错误

PHP从带有url的变量中获取参数

javascript - Extjs:如何获取表单的值

javascript - 如何为 DOM 元素注册事件处理程序

c++ - 私有(private)继承与公开迭代器

c# - 通过引用比较?

javascript - 根据时间延迟刷新单个div

java - 我什么时候想在实际类上声明接口(interface)?

javascript - 扩展 TypeScript Map 以限制数据类型

mysql - 如何计算两个别名的差异以进行排序