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

时间:2013-08-18 21:07:04

标签: javascript variables

对不起我不知道如何解释,但情况就像这个例子。

在我即时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();

4 个答案:

答案 0 :(得分:4)

对象总是通过引用传递。 athis.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);