Ответ 1
Я предполагаю, что span
является свойством в том же классе, что и метод start
... Исправьте меня, если я ошибаюсь.
Таким образом, синтаксис жирной стрелки имеет особое значение в TypeScript.
Когда вы используете () =>
TypeScript, сохраняет лексическую область..., которая просто означает this
, означает то же самое внутри выражения, что и вне выражения. Вы можете увидеть в скомпилированном JavaScript, что он создает переменную с именем _this
, чтобы сделать это.
Таким образом, с синтаксисом толстой стрелки this.span
является свойством span в вашем классе. Без синтаксиса толстой стрелки this.span
- undefined.
Вы можете использовать этот базовый тест, чтобы увидеть разницу, вызвав withFatArrow
или withoutFatArrow
, и вы увидите, что произойдет.
class Test {
public example = 'Test';
private timer;
withFatArrow() {
this.timer = setTimeout(() => alert(this.example), 500);
}
withoutFatArrow() {
this.timer = setTimeout(function() { alert(this.example) }, 500);
}
}
var test = new Test();
//test.withFatArrow();
test.withoutFatArrow();