在javascript中修改原始对象

时间:2014-11-18 19:04:44

标签: javascript object

我在变量“c”中定义了一个对象。我还创建了一个传递对象的函数。当我对该变量进行更改时,它也会更改原始对象,但我担心的是为什么下面的给定语句不能使用该对象。 fiddle

function changeParam(x, y, z) {
  x = 3;
  y = "new string";
  z["key2"] = "new";
  z["key3"] = "newer";

  z = {"new" : "object"};
}

var a = 1,
    b = "something",
    c = {"key1" : "whatever", "key2" : "original value"};
var m=c;
changeParam(a, b, c);

console.log(c)
console.log(m)

1 个答案:

答案 0 :(得分:0)

JavaScript passes object by reference.要按值传递,您需要先克隆它。

this question中,您可以找到执行此操作的选项。有很多方法可以做到,每个方法都有优点和缺点。取决于你想要的对象你可以选择一个。

最简单的方法是将对象字符串化为JSON并再次解析。 (请注意,您无法在此类对象中保存功能):

var newObject = JSON.parse(JSON.stringify(oldObject));

适用于您的jsfiddle

如果你在项目中使用jquery,你也可以使用“jquery way”:

var newObject =  jQuery.extend(true, {}, oldObject);