Webstorm: Запоминание хитростей получателей, предупреждающих о "свойстве только для чтения"

Фон

Когда я использую запомненный геттер, как это:

var myModule = {

    get foo () {
        delete this.foo;
        return this.foo = 'something'
    }
};

в Webstorm я получаю предупреждение:

Недвижимость только для чтения

Вопрос

Почему я получаю это предупреждение и могу ли я заставить его исчезнуть?

2 ответа

Решение

Кажется, WebStorm показывает предупреждение, потому что присвоения свойствам доступа без установщика игнорируются в нестрогом режиме и генерируются в строгом режиме.

И это действительно может быть проблемой, если вы хотите изменить значение foo но получатель еще не был вызван.

Следовательно, лучшей практикой может быть определение сеттера тоже

var myModule = {
  set foo (val) {
    delete this.foo;
    this.foo = val;
  },
  get foo () {
    delete this.foo;
    return this.foo = 'something';
  }
};

Тогда WebStorm должен распознать установщик и, следовательно, не показывать предупреждение.

Вы можете подавить самоанализ WebStorm следующим образом:

var myModule = {
    get foo () {
        delete this.foo;
        //noinspection JSUnresolvedVariable
        return this.foo = 'something'
    }
};

Но я считаю, что это плохая практика, и вам следует избегать этого, если только вам это не нужно.

Как я это узнал? В WebStorm есть аккуратный световой клуб, содержащий полезные советы почти для всех предупреждений и ошибок от Alt + Enter:

Другие вопросы по тегам