JavaScript函数调用有四种模式:1.方法调用时this指向调用对象;2.函数调用时非严格模式this为全局对象,严格模式为undefined;3.构造调用时this指向新实例;4.显式调用时通过call/apply/bind指定this。JavaScript中函数调用的四种模式JavaScript中函数的this值不是由函数定义决定的,而是由**调用方式**决定的。共存在四种标准调用模式,每种对应不同的this绑定规则:1. 方法调用模式(Method Invocation)当函数作为对象的属性被调用时,this指向该对象。const obj = { name: 'Alice', greet() { console.log(this.name); // 'Alice' }};obj.greet(); // this → obj2. 函数调用模式(Function Invocation)独立调用函数(非对象属性、非new、非call/apply/bind),在非严格模式下this指向全局对象(浏览器中为window),严格模式下为undefined。function foo() { console.log(this);}foo(); // 非严格:window;严格:undefined3. 构造器调用模式(Constructor Invocation)使用new关键字调用函数时,会创建新对象,this绑定到该新实例。function Person(name) { this.name = name;}const p = new Person('Bob'); // this → 新建的p实例4. 显式调用模式(Explicit Invocation)通过.call()、.apply()或.bind()手动指定this值。function log() { console.log(this.role);}const user = { role: 'admin' };log.call(user); // 'admin'log.apply(user); // 'admin'log.bind(user)(); // 'admin'this绑定优先级顺序当多种绑定方式共存时,this取值遵循明确的优先级,从高到低如下:new 绑定:使用new调用时,无论是否用bind预设过this,最终this都指向新创建的实例(bind返回的函数被new调用时,原绑定被忽略) 显式绑定:包括call、apply、bind。其中call/apply在运行时立即生效,bind生成永久绑定函数(但可被new覆盖) 隐式绑定(方法调用):对象.方法() 形式,this指向调用者对象。若存在多层嵌套(如obj.fn()),只看最直接的调用对象 默认绑定(函数调用):以上都不满足时触发。严格模式为undefined,非严格模式为全局对象注意:箭头函数不遵循上述任何规则------它没有自己的this,始终继承外层普通函数作用域的this值(词法绑定),因此不参与该优先级表。常见陷阱与验证技巧理解优先级的关键在于"谁最终执行了函数"以及"以什么方式执行"。可借助以下方式快速判断: Zeemo AI 一款专业的视频字幕制作和视频处理工具
相关推荐
正在走向自律43 分钟前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)程序员塔塔喵1 小时前
【MySQL篇|第七篇】MySQL事务在世修行1 小时前
智学文枢:页面切换与跨页数据预填2601_962885722 小时前
如何用 Python 把 K 线重采样成任意周期?独隅2 小时前
Claude API 实战教程:从入门到完整项目打工仔折腾 AI2 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析_孤傲_2 小时前
快速掌握 MySQL 语法信誓旦旦的程序猿3 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)严谨的麻辣烫3 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战数字新视界4 小时前
一体化机柜在数据中心运维中的创新应用与优势分析