У вас есть несколько способов сделать это.
Первый в node.js
будет экспортировать / определить этот объект как глобальный. Таким образом, вам даже не нужно больше импортировать его в разные файлы.
Я сразу скажу вам, что это решение, даже если оно работает, и это довольно прямолинейно, не мое предпочтение. Глобальные переменные являются злом в любом случае .
Тогда, конечно, это может зависеть от случая, но обычно это не лучшая практика для использования. Это действительно ошибка, склонная к деликатности. Например, новый модуль может легко переопределить вашу глобальную переменную.
Кстати, вы можете сделать это следующим образом:
global.contextObject = { ... };
И тогда вы можете использовать его прямо в ваших файлах. Поэтому, если вы хотите добавить реквизит в другой файл, вы можете сделать что-то вроде:
contextObject.TokenToStore = {
"googleRefreshToken": refreshToken,
"googleAccessToken": accessToken,
"expires_in": params.expires_in
};
Другой способ сделать это - использовать prototype
, но вы должны немного изменить свой синтаксис при определении obj
, чтобы использовать конструктор функции, в противном случае используйте прототип для добавления реквизитов через литерал объекта. приведет к назначению новых реквизитов для всех объектов, как вы можете видеть ниже:
const obj = { firstProp: 'I am a first prop' };
console.log(obj);
Object.getPrototypeOf(obj).secondProp = 'I am a second prop';
console.log(obj);
const obj2 = { test: 'I am a test' };
console.log(obj2);
Итак, правильный способ сделать это будет:
const obj = new function () {
this.firstProp = 'I am a first prop';
return this;
};
console.log(obj);
// then export your obj
// In the other file import back your obj and add things to the prototype
Object.getPrototypeOf(obj).secondProp = 'I am a second prop';
console.log(obj);
const obj2 = { test: 'I am a test' };
console.log(obj2);
Последний способ сделать это - просто добавить к объекту простые реквизиты, или, что еще лучше, в тех случаях, когда вы хотите добавить реквизиты к объекту cusotm во многих местах, используйте Object.defineProperty
для их определения, что дает вам гораздо больше возможностей для новых реквизита.
Например, вы можете захотеть, чтобы новые реквизиты, которые вы назначаете в новом объекте, не могли быть изменены в каком-либо другом файле, поэтому невозможно добавить реквизиты с буквальным синтаксисом.
Пример ниже:
const obj = { firstProp: 'I am a first prop' };
console.log(obj);
// then export it
// import it somewhere else
obj.secondProp = 'I am a second prop';
console.log(obj);
// or assign it with defineProperty
Object.defineProperty(obj, 'secondProp', {
value: 'I am a not changable second prop',
writable: false
});
console.log(obj);
// the following will be ignored
obj.secondProp = 'new value';
console.log(obj);
Какой лучший способ взять?
Это действительно зависит от вашего варианта использования.
Я бы избегал глобальных переменных, и я бы избегал литералов, поэтому я бы выбрал прототипы и специально использовал defineProperty
для новых реквизитов в этих случаях.
Но это действительно зависит от вас.
Все они достигают того, что вы ищете.