Javascript transpiler, который автоматически добавляет это ключевое слово внутри классов

#javascript #this #transpiler

#javascript #это #транспилер

Вопрос:

Пожалуйста, скажите мне, кто-нибудь знает какое-нибудь решение, которое заставит меня оставить эти ключевые слова из классов! Я хочу простой транспилятор, который вводит ключевое слово this для каждого места, где это необходимо!

Пример:

 class CleanClass{ //Which I write
   constructor(){
     loveJs=null;
     setLoveJs(true);
   }

  setLoveJs(really=false){
    loveJs=really; 
  }
}

class CleanClass{ //Transpiled
   constructor(){
     this.loveJs=null;
     this.setLoveJs(true);
   }

  setLoveJs(really=false){
    this.loveJs=really; 
  }
}
 

Просто поместите «это». в каждом необходимом месте я не хочу писать «это». 1000 раз в день, ради бога (я знаю, что это может вызвать редкие проблемы, с которыми я справлюсь ..). Я не могу найти какое-либо существующее решение, я не могу поверить, что никто никогда не думал об этом? Должен ли я писать для себя?

Очевидно, что ему нужно следить за локальными переменными или функциями, если локальная переменная существует, не ставьте «this.» перед именем переменной.

Спасибо!

Комментарии:

1. Этого не существует, и из-за того, как работает javascript, это было бы невозможно сделать, не сделав много предположений. Неясно, loveJs=null что вы присваиваете переменной экземпляра loveJS или, возможно, переменной в другой области, или, возможно, глобальной переменной, или в замыкании, или … и т.д. Я бы порекомендовал вам просто написать this . Если вам это действительно не нравится, вы всегда можете использовать вместо этого «конструкторы» на основе замыкания (но не делайте этого).

2. » Я знаю, что это может вызвать редкие проблемы. Я справлюсь с этим». — нет, this редко вызывает проблемы. Хотя, если это так, вы не сможете справиться с ними, используя подход с пропуском ключевых слов.

3. Даже Microsoft, компания, стоящая за C # и VB, когда они создавали Typescript, оставила поведение this в языке. Вам придется изобрести свой собственный язык, который компилируется в javascript, если вы действительно сильно настроены на это. В качестве альтернативы вы можете использовать такие языки, как Rust, для компиляции в javascript или даже использовать emscripten для компиляции C в javascript.

4. Альтернативный подход заключается в использовании функционального программирования и замыканий и полном отказе от OO (по крайней мере, конструктора). Вам не нужны классы / конструкторы для создания объектов в javascript — вы можете просто создавать объектные литералы. Это вполне естественный способ инкапсуляции кода. Посмотрите на разницу между компонентами и функциональными компонентами в React.js

5. with(this) { loveJs = null; setLoveJS(true); } .. но это ужасная идея.