ES6 Классы: Неожиданный токен в script?
Я копирую пример, пытаясь узнать ES6, но я получаю ошибку компиляции:
Unexpected token (2:5)
Кажется, что речь идет о count = 0;
Что я делаю неправильно?
class Counter {
count = 0;
constructor() {
setInterval(function() {
this.tick();
}.bind(this), 1000);
}
tick() {
this.count ++;
console.log(this.count);
}
}
Ответы
Ответ 1
В ES2015 при использовании синтаксиса class
вам необходимо определить переменные экземпляра либо в конструкторе, либо в одном из методов (есть предложение для следующей итерации ES2016, чтобы разрешить ваш синтаксис: Поля ES и статические свойства)
class Counter {
constructor() {
this.count = 0;
setInterval(function() {
this.tick();
}.bind(this), 1000);
}
tick() {
this.count++;
console.log(this.count);
}
}
var c = new Counter();
Проверьте скрипт:
http://www.es6fiddle.net/ifjtvu5f/
Ответ 2
Возможно, это проблема с компилятором. Проверьте, какую версию Babel вы используете.
В моем случае я пропустил зависимость babel-preset-stage-0
.
Ответ 3
На 3 года позже, так что вы, наверное, поняли это, но я поместил переменную count в конструктор
class Counter {
constructor(count = 0) {
this.count = count
setInterval(function() {
this.tick();
}.bind(this), 1000);
}
tick() {
this.count ++;
console.log(this.count);
}
}
let counter = new Counter;
counter.tick()
дал ему больше контроля, вызвав функцию галочки
class Counter {
constructor(count = 0) {
this.count = count;
}
tick() {
let count = this.count;
setInterval(function() {
console.log(count++);
}, 1000);
}
}
let counter = new Counter;
// counter.tick()