ES6箭头函数/函数等效性

4

我刚开始改写一些代码使用ES6,但是发现箭头函数在某些代码中不起作用,我不确定原因。这些代码来自于一个用于装饰Hapi的插件,以增加reply接口功能。

ES5:

server.decorate('reply', 'test', function(schema, response) {
  return this.response(mask(schema, response));
});

ES6:

server.decorate('reply', 'test', (schema, response) => {
  return this.response(mask(schema, response));
});

E66错误导致设备无法正常工作:

Uncaught error: this.response is not a function

这是为什么呢?

1
ES6中的箭头函数会自动将this绑定到外部作用域,因此在这种情况下不等同。 - Seiyria
1
我明白了 - 答案应该是什么?只需要将其保留为 function 吗? - cyberwombat
3
好的。如果对于特定的函数,this已经绑定到其他内容,那么你所能做的就不是很多了。 - Seiyria
好的。请发布答案,我会标记它。谢谢。 - cyberwombat
2
“this” 行为的差异在相关 MDN 页面的第一段中。顺便说一下,正确的术语是 “箭头函数”(而不是 “双箭头函数”)。 - user663031
1个回答

6
在这个特定的案例中,库正在更改decorate的回调函数内部this的引用。使用箭头函数(=>)时,this等同于外部作用域的this。这意味着你基本上只能使用function来实现此功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接