news 2026/7/19 7:05:47

JavaScript this 绑定规则详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript this 绑定规则详解

目录

    • 前言
    • 五条绑定规则
      • 1. 默认绑定(独立调用)
      • 2. 隐式绑定(方法调用)
      • 3. 显式绑定(call / apply / bind)
      • 4. new 绑定(构造函数)
      • 5. 箐头函数(词法绑定)
    • 优先级排序(由高到低)
    • 总结

前言

JavaScript 的this与 Java、Python 等语言不同,它的值不是在函数定义时确定的,而是在函数被调用时动态绑定的。

可以把this理解为函数执行时的"上下文对象"——指向"当前是谁在调用我"。


五条绑定规则

1. 默认绑定(独立调用)

当函数不是作为对象方法调用,也不是通过newcall/apply/bind调用时:

functionshow(){console.log(this);}show();// 非严格模式: window; 严格模式: undefined
  • 非严格模式:指向全局对象(浏览器window,Nodeglobal
  • 严格模式:指向undefined

2. 隐式绑定(方法调用)

谁调用了函数,this就指向谁——即"点"前面的对象。

constobj={name:'Alice',greet:function(){console.log(this.name);}};obj.greet();// Alice(this 指向 obj)

⚠️注意:赋值给变量再调用会"丢失 this"

constfn=obj.greet;fn();// undefined(独立调用,this 指向 window)

3. 显式绑定(call / apply / bind)

手动强制指定this指向:

functionintroduce(age){console.log(this.name+' 今年 '+age+' 岁');}constperson={name:'Bob'};introduce.call(person,18);// Bob 今年 18 岁introduce.apply(person,[18]);// Bob 今年 18 岁(参数用数组)constboundFn=introduce.bind(person,18);boundFn();// Bob 今年 18 岁(bind 返回新函数)
方法参数形式返回值
call逐个传递立即执行
apply数组传递立即执行
bind逐个传递返回新函数

4. new 绑定(构造函数)

使用new调用函数时,JS 创建新对象,this指向该对象:

functionCar(model){this.model=model;}constmyCar=newCar('Tesla');console.log(myCar.model);// Tesla

5. 箐头函数(词法绑定)

箭头函数没有自己的this,它会捕获定义时所在作用域的this,且call/apply/bind无法改变:

constobj={name:'Eve',greet:function(){// 普通函数:this 指向 windowsetTimeout(function(){console.log(this.name);// undefined},100);// 箭头函数:this 继承自外层(即 obj)setTimeout(()=>{console.log(this.name);// Eve},100);}};obj.greet();

优先级排序(由高到低)

优先级绑定类型
1(最高)new绑定
2显式绑定(call/apply/bind
3隐式绑定(对象方法调用)
4(最低)默认绑定

总结

记住一句话:除非使用箭头函数,否则this永远指向"调用它的那个对象";如果不知道是谁调用的,就指向全局(严格模式下是undefined)。

掌握这条规则,再结合call/apply/bind能强行改变指向,就能解决绝大多数this问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 7:03:45

农业农村部组织开展强田管抗灾害夺秋粮丰收行动

新华社北京7月17日电(记者古一平)记者17日从农业农村部获悉,农业农村部决定组织实施奋战100天强田管抗灾害夺秋粮丰收行动,全力以赴夺取秋粮和全年粮食丰收。当前,全国进入“七下八上”主汛期,是农业灾害高…

作者头像 李华
网站建设 2026/7/19 7:03:02

为什么有些论文答辩前紧张到失眠,真正答辩时却异常顺利?

为什么有些论文答辩前紧张到失眠,真正答辩时却异常顺利?很多人以为,答辩最大的挑战发生在现场。其实真正的较量,往往早在答辩开始之前就已经结束。毕业论文答辩前,很多学生都会经历一个非常真实的阶段。距离答辩还有几…

作者头像 李华
网站建设 2026/7/19 7:02:37

现在的虚拟陪伴,已经做到这种程度了吗?

有没有试过玩一款游戏,玩着玩着竟对里面的角色动了真情?现在的 AI 角色扮演游戏已经不只是简单的文字对话,而是能带给你真实情感联结的沉浸式体验。Luston AI 就是其中做得相当出彩的一款,把虚拟陪伴做到了新高度。真正的沉浸感&a…

作者头像 李华
网站建设 2026/7/19 7:02:01

Android自定义View实现高性能模拟时钟

1. 项目概述:打造一个Android模拟时钟在移动应用开发中,模拟时钟是一个经典且实用的UI组件。不同于数字时钟直接显示时间数值,模拟时钟通过时针、分针和秒针的旋转角度来直观展示时间变化,这种视觉表现形式更符合人类对时间的自然…

作者头像 李华
网站建设 2026/7/19 7:01:54

EasyMarkets易信:从服务连续性看平台运营能力

EasyMarkets易信:从服务连续性看平台运营能力外汇服务行业进入更重视规范表达和用户保护的阶段后,平台评测也需要从多个细节展开。EasyMarkets易信受到关注的原因,不只在于品牌露出,更在于它能否围绕稳定运行、信息透明、风险提示…

作者头像 李华
网站建设 2026/7/19 7:01:17

GitHub Copilot助力PowerApps高效编码

GitHub Copilot 主要通过其AI辅助编程能力,间接支持PowerApps开发中的代码编写环节,尤其是在使用PowerApps的自定义代码(如JavaScript Web资源)或Power Fx公式时提供智能建议。两者结合,旨在提升低代码平台中高级功能的…

作者头像 李华