【发布时间】:2015-03-17 17:56:15
【问题描述】:
我有以下使用胖箭头函数的 ES6 代码:
var test = {
firstname: 'David',
fn: function() {
return ['one', 'two', 'tree'].map(() => this.firstname)
}
}
console.log(test.fn())
根据箭头函数的工作方式,我希望 this 是 test 对象。 ES6Fiddle、Traceur 和 Firefox 产生预期的输出,即 ["David", "David", "David"]。
但是,当使用 chrome://flags/#enable-javascript-harmony 在 Chrome 中启用这些功能时,我得到了 [undefined, undefined, undefined]。如果你console.log(this) 它表明它是窗口对象并且你在严格模式下得到一个错误。 ES6 箭头函数的词法 this 还没有在 V8 中实现吗?
【问题讨论】:
-
在 FF 中工作得很好。我猜 Chrome 的实现仍然很草率。
-
是的,
this在箭头函数中的绑定是 Chrome 目前最大的问题。在我们在兼容表中的测试中,它只实现了 9 个中的 4 个——kangax.github.io/compat-table/es6/#arrow_functions -
谢谢@kangax,应该马上去那里看!很高兴知道 - 太糟糕了,它使箭头函数在 V8 中变得不那么有用了。
-
:( 在带有
--harmony标志的Node 0.12 中存在同样的问题。
标签: javascript this v8 ecmascript-6 lexical-scope