我对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
是否有任何方法可以将此仅仅引用到当前对象?
答案 0 :(得分:3)
没有。您将无法在箭头函数体内覆盖“this”。即使你试图绑定它,它也行不通。这是我最近遇到的一篇有趣的文章。 https://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/