此值不引用当前范围,而是引用ES6箭头样式函数中的父范围

时间:2018-01-09 06:23:32

标签: javascript node.js ecmascript-6 arrow-functions

我对ES6不是新手,但是对于节点js没什么新意,但这看起来很奇怪,因为当我开始使用箭头样式函数而不是function()样式时,我假设两者完全相同但语法不同。但今天就知道了这个案子。

当我定义这样的函数时。

exports.intent = {
  greetings: {
    matcher: ["hi", "hello"],
    reply: function(){
       console.log(this); // it prints {greetings: {..}} expected
       return this.matcher[0]; // returns "hi" which is expected.
    }
  }
}

但是当我在箭头样式中定义相同的函数时,它会抛出错误,因为这里现在引用整个对象而不是当前对象。

exports.intent = {
  greetings: {
    matcher: ["hi", "hello"],
    reply: () => {
       console.log(this); // it prints whole object {intent: {....}}
       return this.matcher[0]; // fail here.
    }
  }
}

我开始知道这两种声明之间的这种重新定义有一些变化。 https://stackoverflow.com/a/40498293/2754029

是否有任何方法可以将此仅仅引用到当前对象?

1 个答案:

答案 0 :(得分:3)

没有。您将无法在箭头函数体内覆盖“this”。即使你试图绑定它,它也行不通。这是我最近遇到的一篇有趣的文章。 https://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/