当前位置: 首页 > 面试题库 >

您可以在箭头功能中绑定“ this”吗?

钱飞翼
2023-03-14
问题内容

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

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

但是,看来您无法绑定它们!

这是函数:

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

这是我要将功能绑定到的对象:

var o = {'a': 42};

这就是我绑定的f方式o

var fBound = f.bind(o);

然后我可以打电话给fBound

fBound();

哪个将输出此(o对象):

{'a': 42}

凉!可爱!除非它不起作用。而不是输出o对象,而是输出window对象。

因此,我想知道:您可以绑定箭头功能吗?(如果是这样,如何?)

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


问题答案:

您无法 重新绑定 this箭头功能。它将始终被定义为定义它的上下文。如果您需要this有意义,则应使用常规功能。

根据ECMAScript 2015规范:

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



 类似资料:
  • 问题内容: 我们都知道我们需要在React中绑定函数以使其起作用。我知道为什么我们需要绑定它。 但是我不确定为什么我们不需要绑定箭头功能。 示例:使用箭头功能(无需绑定) }; 现在,使用功能(需要绑定) }; 我不是在问为什么我们需要绑定功能。我只想知道为什么箭头功能不需要绑定。 谢谢。 问题答案: 仅仅因为arrow函数的上下文中没有以下内容: 这个 论点 超 新目标 所以,当你引用此箭头功能

  • 问题内容: 如何在Javascript和/或jQuery中将功能绑定到左右箭头键?我看了一下jQuery的js-hotkey插件(包装了内置的bind函数以添加一个参数来识别特定的键),但是它似乎不支持箭头键。 问题答案: $(document).keydown(function(e) { switch(e.which) { case 37: // left break; 将箭头键的自定义代码放在

  • 问题内容: 我在几个地方读到,主要的区别是“ 在箭头函数中按词法绑定”。一切都很好,但是我实际上不知道那意味着什么。 我知道这意味着它在定义函数主体的大括号范围内是唯一的,但是我实际上无法告诉您以下代码的输出,因为我不知道所指的是什么,除非它指的是胖箭头函数本身…。似乎没有用。 问题答案: 箭头函数捕获封闭上下文的值 因此,要直接回答您的问题,箭头函数内部的值将与分配箭头函数之前的值相同。

  • 问题内容: 我知道上面的箭头功能等效于: 但是我对以下内容有些困惑 为什么函数参数用大括号括起来,而函数主体仅用括号括起来? 问题答案: ES6的一些语法糖元素在这里起作用: 参数解构 :该函数实际上使用一个对象,但是在执行该函数之前,将其唯一的对象参数解构为三个变量。基本上,如果传递给函数的参数称为obj,则为onClick变量分配obj.onClick的值,并与其他命名的分解变量相同。 简洁的

  • 问题内容: Node.js是否已经支持=>函数关键字别名?如果是,请从哪个版本开始?如何启用此语言扩展? 成为 问题答案: 简而言之:是的,自版本4.4.5起,Node.js中就很好地支持箭头功能。 完全正确的支持从版本6开始。最初的支持是从v0.12开始引入的,但是它非常不完整,默认情况下处于禁用状态,直到v4.0变得更好为止。

  • 问题内容: 这个问题与使用React时类似。是否最好在构造函数中使用胖箭头函数或绑定函数?但是有点不同。您可以将函数绑定到构造函数中,或者仅在构造函数中应用箭头函数。请注意,我只能在项目中使用ES6语法。 1。 2。 这两种方式的优缺点是什么?谢谢。 问题答案: 由于某些原因,选项1通常更可取。 原型方法更易于扩展。子类可以覆盖或扩展与 当实例属性 或ES.next class字段 代替使用,调用