Я новичок в JS - мое чтение до сих пор предполагает, что глобальные переменные - это огромный красный флаг, и его следует избегать любой ценой.В настоящее время я работаю над проблемой рефакторинга, и у меня есть некоторые числовые значения, объявленные в файле .js, которые впоследствии вызываются в других файлах .js в программе.Я не уверен в лучших методах использования здесь и, следовательно, для устранения любых запахов кода.
У меня есть некоторые константы, хранящиеся в файле, options.js
.Эти константы затем используются в нескольких других файлах, таких как agedbrie.js
и quality.js
.
Все эти файлы хранятся в одной папке.
Что касается шагов, предпринятых до сих пор, я рассмотрел просто объявление обязательных переменных в каждой функции, которая нуждается в них, поэтому (я думаю) удаление их из глобального пространства.Однако это приводит к значительному количеству повторений и к коду, который не следует принципам DRY.
Options.js:
const MIN_SALE_DATE = 0
const MAX_QUALITY = 50
const MIN_QUALITY = 0
const SULFURAS_QUALITY = 80
Примеры того, как эти константы вызываются в другихфайлы в моей программе:
Agedbrie.js
(function(exports){
//other code unrelated
}
AgedBrie.prototype.updateQuality = function () {
if (this.sellIn > MIN_SALE_DATE ){
quality.js:
//other code
function qualityMaximum(quality){
if (quality > MAX_QUALITY) {
quality = MAX_QUALITY
}
return quality
}
//further code
По сути, у меня есть код, который работает прямо сейчас и проходит тесты у меня естьнаписано, однако я стремлюсь забирать лучшие практики рано, поэтому устранение любых возможных глобальных переменных довольно важно.Заранее спасибо!
РЕДАКТИРОВАТЬ
Просто чтобы уточнить - Это попытка позолоченного ката
Iу меня есть рабочее решение, только оно содержит глобальные переменные, которые, как я знаю, являются чем-то вроде красного флага, когда дело доходит до лучших практик.
РЕДАКТИРОВАТЬ 2
Мне удалось исправить это самостоятельно - если кто-нибудь еще попадет сюда через Google, вот что я сделал:
options.js
var OPTIONS = (function() {
var private = {
"MIN_SALE_DATE" : 0,
"MAX_QUALITY" : 50,
"MIN_QUALITY" : 0,
"SULFURAS_QUALITY" : 80
};
return {
get: function(name) { return private[name]; }
};
})();
Затем для вызова этих переменных в другом месте моего кода:
OPTIONS.get("name here")