对不起我不知道如何解释,但情况就像这个例子。
在我即时new function c
之后,更改值this.i
将直接影响到a.
我该如何解决这个问题?我不知道更改this.i
会影响到a
。
http://jsbin.com/iPIkomu/1/edit
var a = { c: 1 };
var b = function(){
this.i = a;
this.i.c = 2;
};
var c = function(){
this.i = a;
alert(this.i.c);
};
c.prototype.set = function(){
this.i.c = 4;
alert(a.c);
};
d =new c();
d.set();
答案 0 :(得分:4)
对象总是通过引用传递。 a
和this.i
指的是完全相同的对象。
要获得不同的对象,您需要执行this.i = {c:1};
或类似操作。
答案 1 :(得分:2)
我建议改变:
var a = { c: 1 };
to
var a = function() { return { c: 1 }; }
然后再
this.i = a;
to
this.i = a();
做这样的事情你将确保你总是得到一个新的对象。使用您的代码,您指的是相同的对象。
答案 2 :(得分:1)
使用此
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);
参考: https://hackernoon.com/javascript-reference-and-copy-variables-b0103074fdf0
答案 3 :(得分:0)
由于“ a”是一个对象,因此通过将它们等同,将引用传递给“ a”,从而更改两个变量。 您可以使用两种方法中的任何一种-
this.i = JSON.parse(JSON.stringify(a));
OR
this.i = Object.assign({},a);