你能在箭头函数中绑定“this”吗?

2022-08-30 01:53:41

我已经尝试ES6一段时间了,我只是遇到了一个小问题。

我真的很喜欢使用箭头函数,只要有可能,我就会使用它们。

但是,似乎您无法绑定它们!

这是函数:

var f = () => console.log(this);

以下是我要将函数绑定到的对象:

var o = {'a': 42};

以下是我如何绑定到:fo

var fBound = f.bind(o);

然后我可以打电话给:fBound

fBound();

这将输出这个(对象):o

{'a': 42}

凉!可爱!除了它不起作用。它不是输出对象,而是输出对象。owindow

所以我想知道:你能绑定箭头函数吗?(如果是这样,如何?


我已经在Google Chrome 48和Firefox 43中测试了上面的代码,结果是相同的。


答案 1

不能在箭头函数中重新绑定。它将始终被定义为定义它的上下文。如果你要求有意义,你应该使用一个普通的函数。thisthis

来自 ECMAScript 2015 规范

ArrowFunction 中对参数、super、this 或 new.target 的任何引用都必须解析为词法封闭环境中的绑定。通常,这将是立即封闭函数的函数环境。


答案 2

要完整,可以重新绑定箭头函数,只是不能改变的意思。this

bind仍然具有函数参数的值:

((a, b, c) => {
  console.info(a, b, c) // 1, 2, 3
}).bind(undefined, 1, 2, 3)()

在这里试试:http://jsbin.com/motihanopi/edit?js,console