#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); }
.. но это ужасная идея.