JavaScript中的对象属性-值行为

时间:2018-08-20 22:02:31

标签: javascript ecmascript-5

在下面的代码中,如何将objA.foo值设置为“ bar”? (JavaScript新手开发人员)。 JS中的哪个概念或功能将objA属性的值设置为“ bar”?

var objA = Object.create({
    foo: 'foo'
});
var objB = objA;
objB.foo = 'bar';
console.log(objA.foo);
console.log(objB.foo);

2 个答案:

答案 0 :(得分:2)

var objB = objA不会创建该对象的副本。它引用了objA。通过引用修改对象会更改持有该对象引用的两个变量。

要克隆对象,可以使用JSON.parse(JSON.stringify(obj))

var objA = Object.create({
    foo: 'foo'
});
var objB = JSON.parse(JSON.stringify(objA));
objB.foo = 'bar';
console.log(objA.foo);
console.log(objB.foo);

您也可以使用Object.assign({}, obj)

var objA = Object.create({
    foo: 'foo'
});
var objB = Object.assign({}, objA);
objB.foo = 'bar';
console.log(objA.foo);
console.log(objB.foo);

请参见documentation

答案 1 :(得分:0)

  

var objB = objA;

您实际上是在创建对objA的引用。如果您想在没有引用的情况下复制对象,则可以使用传播语法:

var objB = {...objA};

另外,请参见:How do I correctly clone a JavaScript object?