繁体   English   中英

ES6箭头功能在V8中有词汇

[英]ES6 arrow function lexical this in V8

我使用胖箭头函数有以下ES6代码:

var test = {
  firstname: 'David',
  fn: function() {
    return ['one', 'two', 'tree'].map(() => this.firstname)
  }
}
console.log(test.fn())

根据箭头函数应该如何工作,我希望thistest对象。 ES6Fiddle ,Traceur和Firefox产生了预期的输出,即["David", "David", "David"]

使用chrome://flags/#enable-javascript-harmony在Chrome中启用这些功能时,我得到[undefined, undefined, undefined] 如果你使用console.log(this)它会显示它是窗口对象,并且在严格模式下会出现错误。 this ES6箭头功能的词汇是否在V8中没有实现?

词典this是ES6箭头功能的最后一部分落在v8中,这就是为什么它仍然落后于旗帜而尚未准备好发货的原因。 Igalia的Adrian Perez正在实施箭头功能,一旦完成一些TurboFan问题,最终补丁几乎准备就绪: https ://codereview.chromium.org/883823002/

胖箭是ES6的一个特征。 它已在Firefox(Gecko)中引入,但尚未在其他浏览器中引入(尤其不完全在V8中,这对于nodejs / iojs开发很有意义。)这是一个参考文档

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Browser_compatibility

无论如何如果你需要范围绑定,那么而不是=>使用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");
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM