将对象参数传递给函数时更改它

时间:2014-03-11 18:30:44

标签: javascript jquery

我有一个对象,让我们说" globalObject",在代码的很多地方引用,我不应该改变这个对象。 我需要做的是向该对象添加属性并将修改后的对象传递给函数。但我不应该真正更改对象,因此代码中的引用仍将引用未修改的原始对象。

我应该像这样克隆对象吗? :

var globalObject = {param1: "something", param2: 42};

// Need to add "param3" to object which will be passed into "foo" function.
// Is cloning object is the only way?
var paramObject = jQuery.extend(true, {}, globalObject);
paramObject.param3 = "new param";
foo(paramObject);

有更好的方法吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

您可能希望使用快速可靠的JSON serilization / deserialization克隆对象。然后,您可以向克隆的对象添加额外的属性。

为此,您不需要jQuery:

var paramObject = JSON.parse(JSON.stringify(globalObject)); //cloning
paramObject.param3 = "new param";

答案 1 :(得分:0)

你可以更快地做到这一点:

foo(jQuery.extend(true, {
    param3: "new param"
}, globalObject);

但是,就我而言,克隆对象需要参与其中。