在ES5中,我们会创建一个绑定方法,如下所示:
function FakeClass() {
this.foo = this._foo.bind(this);
// or, with Underscore/Lodash
// this.foo = _.bind(this.foo, this);
// or
// _.bindAll(this, 'foo');
}
FakeClass.prototype._foo = function() { ...
使用ES6语法,这似乎不会消失;似乎我仍然必须明确地绑定方法:
class FakeClass {
constructor() {
this.foo = this._foo.bind(this);
}
_foo() { ...
}
所以,我的问题是:有更好的方式实际上是(当前的或计划的)JS的一部分吗?
注意:我看到一些Stack Overflow答案提到了这种语法:
class FakeClass {
foo = () => { ...
}
然而,当我尝试使用该语法时,只有Babel允许它; Chrome和我的IDE都告诉我这是无效的语法。据推测,这是因为foo = () => {
语法来自一些未完成的ES7或ES8提案。但是,我无法向Google提供答案,直到我这样做,我仍然犹豫是否要在我的代码中添加(将来可能无效)语法。