我使用胖箭头函数有以下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中实现?
答案 0 :(得分:11)
Lexical this
是ES6箭头函数的最后一部分,它将落在第8版中,这就是为什么它仍然在旗帜后面并且尚未准备好发货的原因。 Igalia的阿德里安·佩雷斯(Adrian Perez)正在实施箭头功能,一旦完成一些TurboFan问题,最终补丁几乎准备就绪:https://codereview.chromium.org/883823002/
答案 1 :(得分:1)
胖箭是ES6的一个特色。它已在Firefox(Gecko)中引入,但尚未在其他浏览器中引入(尤其不完全在V8中,这对于nodejs / iojs开发很有意义。)这是一个参考文档
无论如何如果您需要范围绑定,则使用=>
代替bind()
。这是一个简单的例子。
而不是这个。
$("#example").on("click", () => {
// your code goes here
});
使用此功能。
$("#example").on("click", (function() {
// your code goes here
}).bind(this));
如果您不需要范围绑定,那么就这样做。
$("#example").on("click", function() {
console.log("example");
});