我对编码很新,所以这可能是一个愚蠢的问题但是,我正在尝试使用for循环来创建一个对象的多个实例,每个实例的日期增加一天。我的问题是该对象的每个实例最终都采用相同的日期值:最终迭代的日期值。我做了一些搜索,一个答案似乎是我用来跟踪日期的变量是静态的。我不知道这是我的问题还是确实如何解决它,所以任何帮助都会非常感激。
//getMonday is a function that returns the first day of the week from a given d
var TestObject = function(date) {
this.date = date;
}
function dateTest() {
var today = new Date();
var contents = [];
var orderDate = new Date(getMonday(today));
var j = 0;
for(var k = 1; k<6; k++) {
for(var i = 0; i<6; i++) {
contents[j] = new TestObject(orderDate);
Logger.log("filling in contents[" + j + "]. I'm putting in date: " + orderDate);
j++;
}
orderDate.setDate(orderDate.getDate() + 1);
}
for(var i = 0; i < contents.length; i++) {
Logger.log(contents[i]);
}
}
有两个循环因为我需要在我的特定代码实例中循环两次,它会从一个spreadhseet中删除值,并且只在行号改变时增加日期。
for循环中的Log打印出所有正确的日期,但是当dateTest对象全部打印出来时,它们都包含最终的日期迭代。
答案 0 :(得分:0)
在Javascript中,分配时不会复制对象。它们是通过引用分配的。
在Request()
构造函数中,这行代码:
this.date = date
没有复制date
参数,只是在传递的this.date
对象中指向orderDate
。当orderDate
对象将来发生更改时,this.date
将指向已更改的对象。因此,当您在循环中更改orderDate
对象时,每个Request
对象最终都指向同一个orderDate
对象,因此它们都会在循环结束时看到该值。 / p>
您可以通过以下方式修复代码:
this.date = new Date(date);
这将制作传入日期对象的副本。