Javascript js更改变量将影响原始变量
很抱歉,我不知道如何解释,但情况就是这样 在I瞬发aJavascript 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(); 做这样的事情,你一定会得到
后,新函数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);