在 Node 0.11 w/ Foo.prototype 中使用 ES6 箭头函数

Using ES6 Arrow Functions in Node 0.11 w/ Foo.prototype

在原型扩展中使用箭头函数时,我看到了意外行为。

function ES6Example(){}
ES6Example.prototype.foo = function(bar){
  return ((baz) => {
    console.log(this)
    this.bar = baz
  })(bar)
}

var es6Example = new ES6Example
es6Example.foo('qux')

console.info(es6Example.bar)

以上代码导致全局上下文被打印出来,es6Example.bar 未定义。这是旧行为。根据我在 MDN 中看到的文档,我希望它能绑定到实例。我 运行 上面的代码使用 Node v0.11.15 和 harmony flag。请注意以下内容确实有效:

function ES6Example(){
    this.foo = baz => {
      this.bar = baz
    }
}

V8 实现仍然不完整,仍然没有词法 this

这就是为什么在 Chrome node.js 和 io.js 中,您必须设置一个特殊的 "harmony" 参数才能使用它:它不适合一般消费。