Javascript 将对象设置为新变量时更新对象的时刻
这件事一直困扰着我,我想现在是我开始思考的时候了,有人能给我解释一下,以及如何解决它吗 好的,我用MomentJS来创建一个时间对象,就像这样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
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上查找任何默认函数,因此这种行为只是基于库是否会变异或复制对象,并且是库特定的?我想我现在明白了,谢谢!