NodeJS - возвращение объекта из функции перезаписывает предыдущее объявление этого объекта - PullRequest
0 голосов
/ 11 мая 2018

У меня есть объект в моем main.js:

var Status={
   prop1:'',
   prop2:'',
   prop3:'',
   prop4:''
};

Тогда у меня есть функция (в другом файле .js), которая вычисляет prop2, prop3 и prop4 примерно так:

function CalculateProperties() {
   var returnToMain={
      prop2:'',    //note that props in returnToMain have same names as in Status
      prop3:'',
      prop4:''
       };
   returnToMain.prop2=**some_calculations**;
   returnToMain.prop3=**some_calculations**;
   returnToMain.prop4=**some_calculations**;

   return returnToMain;

}

module.exports = CalculateProperties;

Из main.js я называю это так:

Status = CalculateProperties();

Я ожидаю, что он оставляет prop1 в покое и перезаписывает prop2, prop3 и prop4, но он перезаписывает объект в целом, поэтому после запуска я получаю:

Status={
   prop2: 'Calculated_Value',
   prop3: 'Calculated_Value',
   prop4: 'Calculated_Value'
};

вместо:

Status={
   prop1: 'Original_Value',
   prop2: 'Calculated_Value',
   prop3: 'Calculated_Value',
   prop4: 'Calculated_Value'
};

Как мне сделать так, чтобы он перезаписывал только свойства с одинаковыми именами и оставлял другие в покое? Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вы создаете новый объект в CalculateProperties и возвращаете его.В вашем main.js вы присваиваете это возвращаемое значение Status, который является другим объектом.Следовательно, теперь Status указывает на новый объект, который ничего не знает о более старых свойствах.

У вас есть три варианта:

a.Передайте объект Status в CalculateProperties и обновите его.

b.Присвойте его новой переменной, скажем CalculatedValues, и скопируйте соответствующие свойства в Status

c.Объедините объекты, используя Object.assign () или lodash.merge () .

0 голосов
/ 11 мая 2018

Вы должны объединить свои объекты, используя Object.assign

Status = Object.assign(Status, CalculateProperties());

es6 аналог

Status = {...Status, ...CalculateProperties()} 
...