Я знаю, что ES6 решил множество проблем, которые существовали с ключевым словом this
в ES5, например функциями и классами стрелок.Почему «это» в классе ES6 не подразумевается?
Мой вопрос относится к использованию this
в контексте класса ES6 и почему он должен быть написан явно. Я изначально был разработчиком Java, и я пришел из мира, где следующие строки кода были совершенно естественными.
class Person {
private String myName;
public Person() {
myName = "Heisenberg";
}
public void sayMyName() {
System.out.println("My name is " + myName);
}
}
Компилятор всегда будет относиться к значению поля myName
, если он не имеет локальную переменную с именем myName
, определенной в рамках метода.
Однако, как только мы превратим этот код ES6:
class Person {
constructor() {
this.myName = "Heisenberg";
}
sayMyName() {
console.log(`My name is ${myName}`);
}
}
Это не будет работать, и он будет бросать Uncaught ReferenceError: myName is not defined
. Единственный способ исправить это бросить в явном this
ссылке:
console.log(`My name is ${this.myName}`)
Я понимаю необходимость this
в конструкторе, поскольку классы ES6 не позволяют ваши поля должны быть определены вне конструктора, но я не понимаю, почему Javascript-двигатели не могут (или не будут, из-за стандарта) делать то же самое, что и Java-компиляторы, в случае sayMyName
Итак, вы в основном спрашиваете, почему два в основном совершенно разных языка ведут себя по-другому? Обратите внимание, что «java» в «javascript» не имеет никакого отношения к языку программирования Java. – luk2302
@ luk2302 - Если вы сказали, что языки в принципе не имеют отношения, это правда. Но когда вы говорите, что «java» в «javascript» не имеет никакого отношения к языку программирования Java », это неверно, поскольку вы можете проверить с помощью быстрого поиска Google. Из википедии: «... ** после получения лицензии на товарный знак от Sun **, было принято имя JavaScript. ** Это было скорее маркетинговым движением в то время, когда Java была очень популярна в то время **« –
Not вы сравниваете только разные языки, но и разные понятия. _ «Я понимаю необходимость этого в конструкторе». Почему должна обрабатываться функция конструктора по-разному? – zeroflagL