在 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" 参数才能使用它:它不适合一般消费。
在原型扩展中使用箭头函数时,我看到了意外行为。
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" 参数才能使用它:它不适合一般消费。