Класс объекта, который получает данные от двух других классов того же объекта. - PullRequest
0 голосов
/ 18 июня 2020

Я хочу создать объект, в котором класс использует данные двух других классов того же объекта.

const MatchReplace = {
    Username: {
        RegExp: new RegExp('%USERNAME%', 'g'), // Joined user name
        Value: 'DareFox'
    },
    UserWithTag: {
        RegExp: new RegExp('%USERWITHTAG%', 'g'), // User#XXXX
        Value: 'DareFox#0100'
    },
    ServerName: {
        RegExp: new RegExp('%SERVERNAME%', 'g'), // Name of this server
        Value: 'StackOverflow'
    },
    MemberCount: {
        RegExp: new RegExp('%MEMBERCOUNT%', 'g'), // Member count (human & bots)
        Value: '1005'
    },
    HumanCount: {
        RegExp: new RegExp('%HUMANCOUNT%', 'g'), // Only human count
        Value: '1000'
    },
    BotCount: {
        RegExp: new RegExp('%BOTCOUNT%', 'g'), // Only bot count
        Value: MatchReplace.MemberCount.Value - MatchReplace.HumanCount.Value // Expected: 5
    }
}

Но я получаю сообщение об ошибке:

Value: MatchReplace.MemberCount.Value - MatchReplace.HumanCount.Value
               ^

ReferenceError: Cannot access 'MatchReplace' before initialization

Почему это не работает и как заставить работать?

1 Ответ

1 голос
/ 18 июня 2020

Это не работает, потому что при создании объекта JS инициализирует каждое свойство, а это невозможно сделать, поскольку объект еще не инициализирован и у вас есть ссылка на него в одном из его свойств.

Вы можете действовать тремя способами:

  1. Определите значения перед объектом.
  2. Инициализируйте объект, а затем назначьте его свойства одно за другим в правильном порядке.
  3. Определите значение с помощью функции или геттера:
const matchReplace = {
 //...
 BotCount: {
       RegExp: new RegExp('%BOTCOUNT%', 'g'), // Only bot count
       get Value() {return MatchReplace.MemberCount.Value - MatchReplace.HumanCount.Value; } // Expected: 5
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...