ES6类:脚本中的意外标记?

时间:2015-10-09 15:29:22

标签: javascript ecmascript-6

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

3 个答案:

答案 0 :(得分:17)

在ES2015中,当使用class语法时,您需要在构造函数或其中一个方法中定义实例变量(有一个提议用于下一次迭代,ES2016,以允许您的语法:{ {3}})

class Counter {

    constructor() {
        this.count = 0;
        setInterval(function() {
            this.tick();
        }.bind(this), 1000);
    }

    tick() {
        this.count++;
        console.log(this.count);
    }
}

var c = new Counter();

查看小提琴:

ES Class Fields & Static Properties

答案 1 :(得分:0)

也许这是编译器问题。检查您正在使用的Babel版本。
在我的情况下,我错过了babel-preset-stage-0依赖。

答案 2 :(得分:0)

晚了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()