У меня есть объект, скажем, "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);
Есть ли способ лучше? Благодарю!
Вы можете сделать это быстрее:
foo(jQuery.extend(true, {
param3: "new param"
}, globalObject);
Но да, насколько я понимаю, нужно клонировать объект.
Вы можете захотеть клонировать объект с помощью сериализации/десериализации JSON, которая является быстрой и надежной. Затем вы можете добавить дополнительные свойства к клонированному объекту.
Для этого вам не нужен jQuery:
var paramObject = JSON.parse(JSON.stringify(globalObject)); //cloning
paramObject.param3 = "new param";