Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象设置为新变量时更新对象的时刻_Javascript_Jquery_Momentjs - Fatal编程技术网

Javascript 将对象设置为新变量时更新对象的时刻

Javascript 将对象设置为新变量时更新对象的时刻,javascript,jquery,momentjs,Javascript,Jquery,Momentjs,这件事一直困扰着我,我想现在是我开始思考的时候了,有人能给我解释一下,以及如何解决它吗 好的,我用MomentJS来创建一个时间对象,就像这样 var startOfDiscount = moment('24/07/2018', "DD/MM/YYYY"); 为什么当我试图基于我的startoffisk对象创建一个新变量时,会出现这种情况 var endOfDiscount = startOfDiscount.add(6, 'months').endOf('month'); 这就是将我的st

这件事一直困扰着我,我想现在是我开始思考的时候了,有人能给我解释一下,以及如何解决它吗

好的,我用MomentJS来创建一个时间对象,就像这样

var startOfDiscount = moment('24/07/2018', "DD/MM/YYYY");
为什么当我试图基于我的
startoffisk
对象创建一个新变量时,会出现这种情况

var endOfDiscount = startOfDiscount.add(6, 'months').endOf('month');
这就是将我的
startOfDiscount
对象更改为?我知道行
startoffisk.add(1,'months').endOf('month')
正在操作实际的
startoffisk
对象,但是我如何做才能使它只为新变量的目的而操作/更改,而原始变量保持不变

所以如果我跑

console.log(startOfDiscount);
console.log(endOfDiscount);
他们都打印同一个日期

当我试图使用javascript声明一个新的对象/变量时,为什么javascript会更改原始对象/变量。如何才能使对原始对象的更改仅用于设置新变量


这是我一直无法理解的事情,为什么会发生,以及如何预防。有人能解释一下它为什么会这样做,以及如何防止它吗?

你必须像克隆一样克隆它

var endOfDiscount = startOfDiscount.clone().add...

选中此项

您必须像克隆一样克隆它

var endOfDiscount = startOfDiscount.clone().add...
检查这个

有人能解释一下为什么会这样

因为链式方法返回的上下文如下所示:

moment.prototype.add = function(n, type) {
  //...
  return this;
};
这允许您进行链接,如:

moment().add(1, "months").add(2, "days");
但这也意味着
startoffisk.add(1,“months”)
的计算结果为
startoffisk
,因此,如果将其分配给另一个变量,则会得到对同一对象的两个引用

。。。请问如何预防呢

只需创建一个新的力矩对象,然后对其进行变异:

var endOfDiscount = moment(startOfDiscount).add(6, 'months').endOf('month');
有人能解释一下为什么会这样

因为链式方法返回的上下文如下所示:

moment.prototype.add = function(n, type) {
  //...
  return this;
};
这允许您进行链接,如:

moment().add(1, "months").add(2, "days");
但这也意味着
startoffisk.add(1,“months”)
的计算结果为
startoffisk
,因此,如果将其分配给另一个变量,则会得到对同一对象的两个引用

。。。请问如何预防呢

只需创建一个新的力矩对象,然后对其进行变异:

var endOfDiscount = moment(startOfDiscount).add(6, 'months').endOf('month');

你是对的,它改变了原来的,虽然这是设计的。这里有一个链接到

通过添加时间来改变原始力矩

var startoff折扣=时刻('2018年7月24日','DD/MM/yyyyy');
var endOfDiscount=startOfDiscount.add(6个“月”).endOf(“月”);
console.log(startoff折扣);
console.log(endOfDiscount)

您认为它更改了原始版本是正确的,尽管这是经过设计的。这里有一个链接到

通过添加时间来改变原始力矩

var startoff折扣=时刻('2018年7月24日','DD/MM/yyyyy');
var endOfDiscount=startOfDiscount.add(6个“月”).endOf(“月”);
console.log(startoff折扣);
console.log(endOfDiscount)

我的印象是,这种行为不仅仅是瞬间js,而是javascript对象的一般规则?在处理任何javascript对象时是否必须使用相同的克隆函数?
clone
是momentJS特有的函数。JS中的某些函数将发生变异,而另一些函数将返回一个新的对象/数组。您可以在Ahh ok上查找任何默认函数,因此这种行为只是基于库是否会变异或复制对象,并且是库特定的?我想我现在明白了,谢谢!我的印象是,这种行为不仅仅是瞬间js,而是javascript对象的一般规则?在处理任何javascript对象时是否必须使用相同的克隆函数?
clone
是momentJS特有的函数。JS中的某些函数将发生变异,而另一些函数将返回一个新的对象/数组。您可以在Ahh ok上查找任何默认函数,因此这种行为只是基于库是否会变异或复制对象,并且是库特定的?我想我现在明白了,谢谢!