我很惊讶这不起作用。 (我使用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
选择正确的值。我错过了什么吗?
答案 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