Изменить параметр объекта при передаче его функции

0

У меня есть объект, скажем, "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
Лучший ответ

Вы можете сделать это быстрее:

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

Но да, насколько я понимаю, нужно клонировать объект.

  • 0
    Мне нравится, что вы меняете параметр без создания дополнительной переменной, спасибо.
1

Вы можете захотеть клонировать объект с помощью сериализации/десериализации JSON, которая является быстрой и надежной. Затем вы можете добавить дополнительные свойства к клонированному объекту.

Для этого вам не нужен jQuery:

var paramObject = JSON.parse(JSON.stringify(globalObject)); //cloning
paramObject.param3 = "new param";
  • 1
    Спасибо за полезную информацию. Да, в соответствии с этими тестами: jsperf.com/deep-copy-vs-jquery-extend JSON.parse немного быстрее. Но почему-то мне не очень нравится, что JSON строковый объект и затем анализирует его снова. Я думаю, это всего лишь мое предубеждение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню