Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 此值与';t在ES6箭头样式函数中引用当前范围而不是父范围_Javascript_Node.js_Ecmascript 6_Arrow Functions - Fatal编程技术网

Javascript 此值与';t在ES6箭头样式函数中引用当前范围而不是父范围

Javascript 此值与';t在ES6箭头样式函数中引用当前范围而不是父范围,javascript,node.js,ecmascript-6,arrow-functions,Javascript,Node.js,Ecmascript 6,Arrow Functions,我对ES6不太熟悉,但对node js不太熟悉,但这看起来有点奇怪,因为当我开始使用箭头样式的函数而不是function()样式时,我假设两者完全相同,但语法不同。但今天我知道了这个案子 当我定义这样的函数时 exports.intent = { greetings: { matcher: ["hi", "hello"], reply: function(){ console.log(this); // it prints {greetings: {..}} e

我对ES6不太熟悉,但对node 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.
    }
  }
}
我了解到,这两种类型的声明之间的引用有一些变化


是否有任何方法可以使我仅引用当前对象?

否。您将无法在箭头函数体中重写此
。即使你想把它绑起来,也没用。是我最近看到的一篇有趣的文章。

否。您将无法在arrow函数体中重写此
。即使你想把它绑起来,也没用。是我最近看到的一篇有趣的文章。

你已经知道它们是不同的,那么你现在的问题是什么?你问“有没有办法让我只引用当前对象?”但你已经知道答案了。使用常规函数,而不是箭头函数。使用此函数。问候语。匹配器[0]我正在寻找一种方法来使用此函数,同时使用箭头样式的函数。我不想使用function()样式,因为我在任何地方都使用箭头样式声明。@未定义您不能这样做,箭头函数不打算在任何地方使用。它们不仅仅是函数的简写,它们的工作方式不同,并不意味着取代常规函数。当您的函数是一个对象的方法时(如上面的例子),请使用常规函数。当您需要词法
时,使用箭头函数,当您不在函数中使用
时,使用您喜欢的箭头函数。否。您将无法在箭头函数体中覆盖此项。您已经了解到它们是不同的,那么您现在的问题是什么?你问“有没有办法让我只引用当前对象?”但你已经知道答案了。使用常规函数,而不是箭头函数。使用此函数。问候语。匹配器[0]我正在寻找一种方法来使用此函数,同时使用箭头样式的函数。我不想使用function()样式,因为我在任何地方都使用箭头样式声明。@未定义您不能这样做,箭头函数不打算在任何地方使用。它们不仅仅是函数的简写,它们的工作方式不同,并不意味着取代常规函数。当您的函数是一个对象的方法时(如上面的例子),请使用常规函数。当您需要词法
时,使用箭头函数,当您不在函数中使用
时,使用您喜欢的箭头函数。否。您将无法在arrow函数体中重写此项。