Это не поведение Angular. На самом деле предоставленный вами фрагмент кода находится внутри класса, и a
не является переменной, фактически это свойство.
JavaScript (и Typescript) не требует, чтобы свойства были объявлены ранее методы (не конструктор), так как это просто объявление, которое будет использоваться в будущем, когда будет создан экземпляр этого класса.
Хотя tslint
может предупредить вас о размещении его после методов, это всего лишь проблема стиля кодирования .
Вы можете перевести класс в традиционный конструктор функций:
class Car {
make = 'default';
drive() {
/* ... */
}
model = 'foo'
}
можно записать как (и преобразуется в случае использования некоторого полифилла в браузерах , которые не поддерживают Класс ES6 ):
var Car = function() {
this.make = 'default';
this.model = 'foo';
}
Car.prototype.drive = function() {
/* ... */
}
Обратите внимание, что во втором случае свойства определяются внутри конструктора, поэтому он всегда будет выполняться до вызова метода.