箭头函数不能绑定ES6类中的`this`吗?

时间:2015-06-16 12:58:03

标签: node.js ecmascript-6

我很惊讶这不起作用。 (我使用iojs标志运行--harmony_arrow_functions 2.3.0。)

class Foo {
  constructor() { this.foo = "foo"; }
  sayHi() { return (() => this.foo)(); }
}
f = new Foo();
f.sayHi // Cannot read property 'foo' of undefined.

我原本期望箭头功能为this选择正确的值。我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

我不知道问题,但我的版本对我来说很合适:

class Foo {
    constructor() {
        this.foo = "foo";
    }

    sayHi() {
        return (() => console.log(this.foo))();
    }
}

const f = new Foo();
f.sayHi();

BTW:我正在使用babel

答案 1 :(得分:0)

您的IIFE正在创建一个新的范围。 this然后引用IIFE的范围,其中this.foo未定义。

你解决这个问题的方法是绑定你的IIFE。

class Foo {
    constructor() {
        this.foo = 'foo';
    }
    sayHi() {
        return (() => {
            return this.foo;
        }.bind(this))();
    }
}

let f = new Foo();
console.log(f.sayHi()); //foo