2

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

在我瞬间 a 之后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

4 回答 4

9

用这个

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

于 2017-12-05T07:52:28.850 回答
4

对象总是通过引用传递。athis.i指代完全相同的对象。

要获得不同的对象,您只需要做this.i = {c:1};或类似的事情。

于 2013-08-18T21:09:08.737 回答
2

我会建议改变:

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

然后稍后

this.i = a;
to
this.i = a();

做这样的事情你会确保你总是得到一个新的对象。使用您的代码,您指的是同一个对象。

于 2013-08-18T21:11:24.917 回答
2

由于“a”是一个对象,因此通过将它们等同起来,它会将引用传递给“a”,从而对两个变量进行更改。您可以使用以下两种方法中的任何一种 -

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

或者

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

于 2018-07-28T05:56:35.987 回答