21

我正在复制一个尝试学习 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);
    }
}
4

3 回答 3

27

在 ES2015 中,使用class语法时,您需要在构造函数或其中一个方法中定义实例变量(有一个关于下一次迭代的提议,ES2016,以允许您的语法:ES Class Fields & Static Properties

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/

于 2015-10-09T15:49:47.833 回答
2

迟到了 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()

通过调用 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()
于 2019-04-19T17:24:40.300 回答
1

可能是编译器的问题。检查您使用的 Babel 版本。
就我而言,我错过了babel-preset-stage-0依赖。

于 2018-05-16T14:33:29.243 回答