Javascript js更改变量将影响原始变量

Javascript js更改变量将影响原始变量,javascript,variables,Javascript,Variables,很抱歉,我不知道如何解释,但情况就是这样 在I瞬发a后,新函数c,并更改值此。I将直接影响到a。 我如何解决这个问题??我不知道更改这个。我将影响到a 对象总是通过引用传递a和这个。i指的是完全相同的对象 要获得不同的对象,只需执行this.i={c:1}或类似内容。我建议更改: var a = { c: 1 }; to var a = function() { return { c: 1 }; } 后来 this.i = a; to this.i = a(); 做这样的事情,你一定会得到

很抱歉,我不知道如何解释,但情况就是这样

在I瞬发a
后,新函数c
,并更改值
此。I
将直接影响到
a。

我如何解决这个问题??我不知道更改
这个。我
将影响到
a


对象总是通过引用传递
a
这个。i
指的是完全相同的对象


要获得不同的对象,只需执行
this.i={c:1}或类似内容。

我建议更改:

var a = { c: 1 };
to
var a = function() { return { c: 1 }; }
后来

this.i = a;
to
this.i = a();
做这样的事情,你一定会得到一个新的对象。使用您的代码引用的是同一对象。

请使用此代码

let person1 = { name: 'Vitor', birthYear: 1995 };
// ES6 method
let person2 = Object.assign({}, person1);
如果是ArrayObject

let person1 = [{ name: 'Vitor', birthYear: 1995 },
              { name: 'Mark', birthYear: 1998 }];
// ES6 method
let person2 = Object.assign([], person1);
参考: 由于“a”是一个对象,因此通过将它们相等,它将引用传递给“a”,从而对这两个变量进行更改。 您可以使用以下两种方法中的任何一种-

this.i=JSON.parse(JSON.stringify(a))

this.i=Object.assign({},a)


如果不希望共享对象,那么为什么要在构造函数创建的每个对象上引用相同的对象?
var a={…}
还有其他用途吗?它需要在构造函数之外有什么原因吗?我不知道如何解决这个问题,因为我不知道您最终要做什么。这是因为a可能是许多构造函数使用的默认变量集。这有意义吗?如果它由多个构造函数使用,并且您不想重复代码,则可以在下面的答案中所示的函数中创建它,或者使用共享对象作为主要对象的原型,并使用
object.create()
设置继承。所以你要做
this.i=Object.create(a)我很高兴我帮了忙;)陛下是否可以更新包含建议解决方案的jsbin。@Till:您可能没有调用函数,而是分配它。确保您正在执行
this.i=a()而不是
这个。i=a
let person1 = [{ name: 'Vitor', birthYear: 1995 },
              { name: 'Mark', birthYear: 1998 }];
// ES6 method
let person2 = Object.assign([], person1);