首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你能在一个箭头函数中绑定'this‘吗?

在JavaScript中,箭头函数与常规函数的一个重要区别是它们对this的处理方式。箭头函数不会创建自己的this上下文,而是捕获其所在上下文的this值。这意味着你不能在箭头函数内部使用bindcallapply来改变this的指向。

基础概念

  • 箭头函数:箭头函数是ES6引入的一种新的函数表达式,它使用=>符号来定义。
  • this:在JavaScript中,this关键字通常指向调用该函数的对象。

为什么不能在箭头函数中绑定this

箭头函数没有自己的this上下文,它会捕获其所在上下文的this值。因此,尝试在箭头函数内部使用bind来改变this的指向是无效的。

示例代码

代码语言:txt
复制
const obj = {
  name: 'Alice',
  greet: function() {
    // 箭头函数内部的this指向obj
    setTimeout(() => {
      console.log(`Hello, ${this.name}`);
    }, 1000);
  }
};

obj.greet(); // 输出: Hello, Alice

在这个例子中,greet方法中的箭头函数捕获了greet方法的this值,即obj对象。因此,即使箭头函数在setTimeout中被调用,它的this仍然指向obj

解决方案

如果你需要在函数内部改变this的指向,你应该使用常规函数而不是箭头函数。例如:

代码语言:txt
复制
const obj = {
  name: 'Alice',
  greet: function() {
    // 使用常规函数,可以通过bind改变this的指向
    setTimeout(function() {
      console.log(`Hello, ${this.name}`);
    }.bind(this), 1000);
  }
};

obj.greet(); // 输出: Hello, Alice

在这个例子中,我们使用了常规函数并通过bind方法将this绑定到obj对象。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

知道ES6箭头函数的优缺点

`; } 既然常规形式和箭头语法都能定义函数,我们该如何选择呢? 这篇文章总结了它们之间的关键区别,下次选择的时候心里就有数了。...下面的例子, myMethod()就是箭头函数callback()的外层函数: const myObject = { myMethod(items) { console.log(this)...'); // TypeError: Cat is not a constructor 3arguments 对象 常规函数,arguments是一个类数组对象,包含了函数在执行时接收到的参数列表。...,还有一个独有的特性:如果箭头函数只包含一个表达式,那么就可以省略函数体的花括号和return语句,并且这个表达式会被当作返回值。...答案可能猜到了,用箭头函数作为成员方法。这是 TC39 Class 字段提案的内容,目前处于 stage 3 阶段。

8.2K41

es6箭头函数学习的一个记录

公司要开小程序的项目了,领导让提前熟悉下es6的语法,学习遇到箭头函数相关的一段代码,起初对输出结果不是很理解,重新看了箭头函数的相关概念后才有一点儿明白。...Timer函数内部设置了两个定时器,分别使用了箭头函数和普通函数,然后用setTimeout函数延迟3100毫秒后执行。...因为:前者的this绑定定义时所在的作用域(即Timer函数),后者的this指向运行时所在的作用域(即全局对象) 箭头函数的this.绑定的是Timer函数的s1变量,所以每隔一秒钟s1的值会被更新...,但是在普通函数,this指代的是全局对象,放到浏览器,全局对象是window,在node就是global.s2。...如果增加一个全局变量,如下: window.s2 = 0; 在浏览器再次执行,就会发现this.s2可以打印出值了。 ? 屏幕快照 2017-07-06 下午6.00.57.png

67640
  • 知道脑机接口中的后门攻击?它真的有可能在现实实现

    通过在训练样本中加入少量的污染样本,这些污染样本能够在模型训练后在模型内创建一个"后门",具有后门钥匙的测试样本将被分类为攻击者指定的目标类别。...这些工作在理论上讨论脑机接口的安全性有重要的意义,然而这些攻击在实际其实是很难实现的,主要因为: 这些攻击需要在EEG信号预处理和机器学习模型之间插入一个攻击模块去添加对抗扰动,而在实际系统这两个模块往往被集成在同一块芯片中...通过在训练样本中加入少量的污染样本,这些污染样本能够在模型训练后在模型内创建一个“后门”,在测试阶段,如果测试样本中有“后门”的钥匙,则会被污染的模型分类到攻击者指定的类别。...为了使攻击能够更好地在实际实现,我们选择了特定的窄周期脉冲作为“后门”的钥匙,特别地,窄周期脉冲可以在EEG信号采集的时候通过外界干扰加入到EEG。...我们的攻击主要克服了以下几个挑战,使得其更容易在实际实施: 进行攻击的“后门”钥匙是很简单的,包括两点,生成的模式是简单的,以及在实际脑机接口系统中将钥匙加入到EEG数据是简单的; 攻击使用的钥匙对于不同的

    1K40

    再说this

    当然会问, 难道不能在 greeting 中直接用 data.firstName 和 data.lastName ? 当然可以。但要是想在 greeting 中加入距离好友生日的天数怎么办?...到此为止,我们看到了为什么要使用 this,以及为什么要明确地绑定 this。最后我们来介绍一下,this 实际上是箭头函数。 8. 箭头函数 也许注意到了箭头函数最近很流行。...人们喜欢箭头函数,因为很简洁、很优雅。而且还知道箭头函数和普通函数有点区别,尽管不太清楚具体区别是什么。...简而言之,两者的区别在于: 在定义箭头函数时,不管 this 指向谁,箭头函数内部的 this 永远指向同一个东西。 嗯……这貌似没什么用……似乎跟普通函数的行为一样啊?...,不管 this 指向谁,箭头函数内部的 this 永远指向同一个东西。

    58420

    知道多少this,new,bind,call,apply?那我告诉

    这些都用过?掌握这些内容都是基础的基础了。如果不了解,那还不赶快去复习复习,上网查阅资料啥的!...es6箭头函数,this指向创建者,并非调用者。...file 基础:new绑定,显式绑定,隐式绑定,默认绑定,this绑定的优先级,箭头函数的this。...箭头函数的this是根据其声明的地方来决定this的,它是ES6出现的知识点,箭头函数的this,是无法通过call,apply,bind被修改的,且因箭头函数没有构造函数constructor,...箭头函数对arguments,super,this或new.target的任何引用都解析为当前所在词法作为域中的绑定,通常,这就是箭头函数所在函数作用域。

    38410

    千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的

    不过确实,箭头函数看起来比较简洁,用起来也舒服,不过它的出现是为了解决某一部分问题的,并不是用来替代普通函数的,所以我们不能在一个地方都使用箭头函数。...普通函数的this的指向是运行时绑定的,就像这个例子的,先调用了obj.fn,返回了一个嵌套的匿名函数,此时该匿名函数处于全局,也就是不在obj这个对象内了,因为普通函数的this是运行时绑定的,...第一个箭头函数内调用this,因为箭头函数内没有this,所以向上找,发现函数fn有一个this,于是就与该this绑定。...所以从这个过程我们可以看出,需要函数内部有一个this,但是箭头函数没有自己的this啊,所以箭头函数不能作为构造函数。...例如这样一个例子 let fn = data => data 第一眼看到这句代码的时候,能瞬间读懂这句代码的意思?我想你肯定会多思考几秒,那如果换成普通函数呢?

    76310

    缩短箭头函数的小诀窍

    这里有一点需要注意:能在参数 (param1, param2) 和箭头 => 之间放置换行符。 接下来我们看看如何缩短箭头函数,在处理回调时,使它更易于阅读。 2....greet 箭头函数只有一个参数 who 。该参数被包装在一对圆括号(who) 。 当箭头函数只有一个参数时,可以省略参数括号。...` })是一个表达式。现在 JavaScript 将其视为包含对象文字的表达式。 4.粗箭头方法 类字段提案(截至2019年8月,第3阶段)向类引入了粗箭头方法语法。...这种方法的 this 总是绑定到类实例上。...getMessage 是 Greet 类一个方法,使用粗箭头语法定义。getMessage 方法的 this 始终绑定到类实例。 可以编写简洁的粗箭头方法?是的可以!

    59220

    大厂的面试题

    第一部分 MVVM如何实现模板绑定,依赖是如何收集的? vue2的diff算法是怎样实现的? 请详细说出vue生命周期的执行过程? vue组件间的交互有七种知道几种?...说说hash路由和history路由,能自己编写一个前端路由能手写vuex状态管理能开发自己的组件库(树组件,日期组件,表格组件)?...SSR 和 客户端渲染有什么区别 , vue是如何实现绑定事件的 ? 移动端300ms延时的原因? 如何处理? 主流框架的数据单向/双向绑定实现原理 ?...typeof 和 instanceof js 的原型链,继承 js 的 bind、apply、call 有什么区别 var、let、const的区别 new 操作符原理(手动实现 new 给出思路) 箭头函数...,箭头函数 this 问题,箭头函数是否可以被 new promise 知道,手写一个 promise 怎么写(说思路) promise.all 应用场景 promise 和 async/await

    1.8K20

    一劳永逸地搞懂 JavaScript‘this’

    这都是关于来自哪里的 知道在生活,我们的一些人根据我们所在的地方和我们与谁在一起会戴不同的帽子?常规函数也做类似的事情与 this。...主要吸引力:事件监听器 当你将一个事件监听器绑定一个DOM元素时,基本上是在耳语指示,告诉它,“嘿,当有人与互动时,做这件事。”...情节转折:箭头函数 现在,如果你想在事件监听器中使用箭头函数,要小心。记住我们之前讨论过箭头函数从它们的周围继承 this ?好吧,这意味着它们不像常规函数那样绑定自己的 this。...小心:箭头函数陷阱 快速提醒!记得我们之前关于箭头函数的聊天?即使在这里,它们与 this 的行为也是一致的。所以,如果试图用一个箭头函数来制作一个构造函数...好吧,期望一些怪癖。...如果需要,使用bind或箭头函数来确保正确的上下文。 构造函数箭头函数:如前所述,箭头函数绑定自己的 this。尝试使用它们作为构造函数可能会导致错误。

    12710

    阿里前端一面面经

    因为是座机分机所以不能打过去(试了几次,这个事情告诉我们手机要随身携带,万一面试官用座机打的,还不能回拨)。于是我等啊等,终于在快七点面试官给我打过来了。阿里面试的用户体验是真的好,面试官很耐心。...12cookie有哪些特征 13假设访问了A.com存了一个cookie,在另一个页面用ajax向A的域名的发请求的话,会携带cookie 14cookie的其他解决方案(很方,没想过) 15localstorage...21promise的两个方法,具体实现 22箭头函数 23es6不能在有的浏览器执行,编译过程是怎样的 24如果一个页面要做性能优化,从哪方面考察,从哪些地方优化 25vue的开发模式和jQuery...的开发模式有哪些不同,有哪些优点 26jQuery有没有办法组件化 27能用es6写jQuery 28VUE数据双向绑定是怎么实现的 29假设一个object A里面的值n为1,怎么知道n改变的...,有事件绑定 30有学过其他的框架(说了这两天学习的React) 作者:小弱鸡小菜鸟 本文来源于牛客网 —————————— 牛客网(www.nowcoder.com) - 互联网名企笔试真题 -

    1K00

    我发现了华点:vue规定用普通函数定义方法,为什么react又要我用箭头函数

    如果使用过react和vue,应该发现过一个问题:vue告诉我们不应该把方法、生命周期用箭头函数去定义;而在react的类组件,把方法写成箭头函数的形式却更方便。...但有趣的是,为了达到同样的目的,一个是不能使用箭头函数一个是使用箭头函数便能解决 react vue Reactthis的丢失 首先来看看react,这是一个很普通的类组件写法: class Demo...,在这个过程就处理了this的绑定(bind(methods[key], vm)):把每一个方法的this都绑定到组件实例上。...普通函数都有自己的this,所以绑定完后,被调用时都能正确指向组件实例。但箭头函数没有自己的this,便无从谈及修改,它只能去找父级作用域中的this。这个父级作用域是谁呢?是组件实例?...在类定义只有箭头函数才能根据作用域链找到组件实例;在对象,只有拥有自身this的普通函数才能被修改this指向,被vue处理后绑定到组件实例。

    78910

    真的了解 Java 8 的 lambda 表达式、方法引用、函数式接口、默认方式、静态方法

    ; 4 }).start(); 会发现,用 lambda 表达式的方式能够写更少的代码,看起来也会更加的舒服和简洁。 这里没有使用参数,只是一个简单的例子。 我们再看一个例子。...在这个例子,我们加了一个参数,在()中间我们加了一个 x ,代表的意思其实是:通过 forEach 方法,我们把一个元素已经赋值到 x 中了,拿到这个 x ,我们就可以输出结果。...是不是需要 new 一个对象呢,那么现在用构造函数引用又是怎么做的呢? 下面我们用一个例子讲解一下,在这个例子,对象还是使用上面的 ClassMate。...③ 我们发现构造函数引用:类名::new ,然后对于使用哪一个构造函数是由上下文决定的,比如有一个参数和两个参数和无参数的构造函数,会自动确定用哪一个。...函数式接口 什么是函数式接口呢? 这个名词在 Java 以前是很少听到的,但是正是有了 Java 8 的横空出世,函数式编程也变得熟悉了。

    1.2K20

    ES6基础:箭头函数

    ES6基础系列(三)箭头函数 一、基本用法 先来看看 ES5 我们怎么写一个函数 const foo = function (num) { return num + 1; }; 再来看看...ES6 为我们提供的箭头函数 const foo = (num) => num + 1; 看这个例子难道箭头函数是为了让我们的代码看上去更“高大上”?...箭头函数的 this,就绑定在它最近一层非箭头函数的 this. 一句话理解:箭头函数内部的 this 是词法作用域,由上下文确定。...this 指向对象 第二个箭头函数,它的 this 绑定在最近一层非箭头函数,也就是 obj 上 2.2 没有 arguments 箭头函数没有自己的 arguments 对象,这不一定是件坏事,因为箭头函数可以访问外围函数的...当通过 new 调用函数时,执行 [[Construct]] 方法,创建一个实例对象,然后再执行函数体,将 this 绑定到实例上。 当直接调用的时候,执行 [[Call]] 方法,直接执行函数体。

    32010

    都2019了,为何的 JavaScript 代码还如此冗长~

    我们希望能在获取一部分数据之后立即更新数据集,这时候就可以使用for...of在一个数组上进行循环,然后在内部加入async的代码块,但这样做会造成阻塞,直到所有调用结束。...链式操作 遇到过这个问题?在访问嵌套对象的属性时,无法事先确定对象的属性是否存在?...类属性和绑定 JavaScript函数绑定是个非常常见的任务。由于ES6标准引入了箭头函数,我们现在可以自动地用定义的形式绑定函数——这方法非常好用,现在的JavaScript开发者都在用它。...之前类刚刚出现时是没办法使用箭头函数的,因为类需要用某种特殊的方式来定义。我们需要在某个地方进行绑定,例如在构造函数里(在React.js中最好这样做)。...我很讨厌需要先定义类方法再绑定方法的流程,不过现在可以通过箭头函数进行自动绑定箭头函数现在可以直接在类中使用。

    82230

    JS箭头函数之:为何用?怎么用?何时用?

    箭头函数有两个主要的优点: 更简短的函数; 更直观的作用域和this的绑定(不绑定this) 因为这些优点,箭头函数比起其他形式的函数声明更受欢迎。...this 在箭头函数出现之前,每个新定义的函数都有它自己的this值(在构造函数的情况下是一个新对象,在严格模式的函数调用则为undefined,如果该函数被作为"对象方法"调用则为基础对象等)。...通过call或者apply调用 由于箭头函数没有自己的this指针,通过call()或者apply()方法调用一个函数时,只能传递参数(不能绑定this),它们的第一个参数会被忽略。...arguments 箭头函数绑定Arguments对象。...深层调用 如果函数定义为箭头函数,并且在他们之间来回调用,当你调试bug的时候将被代码困惑,甚至得到如下的错误信息: {anonymous}(){anonymous}(){anonymous}()

    3.9K10
    领券