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 一款专业的视频字幕制作和视频处理工具
相关推荐
sycmancia12 分钟前
Qt——多线程中的信号与槽(二)Database_Cool_13 分钟前
时序数据库选型:阿里云 Lindorm 时序引擎 vs InfluxDB 全维度对比其实防守也摸鱼18 分钟前
渗透--损坏的对象级别鉴权漏洞(Broken Object Level Authorization, BOLA)hehelm29 分钟前
IO 多路复用 — Reactor2501_9419820532 分钟前
企业微信二次开发:如何用 Python 搭建通用的 Webhook 实时消息接收在世修行32 分钟前
第24篇:PyInstaller打包实战 — 从Python脚本到Windows EXE农村小镇哥36 分钟前
如何限定IP访问Oracle数据库华研前沿标杆游学1 小时前
2026年制造企业标杆参访实操指南:3步选对适配参访路线cfm_29141 小时前
SpringBoot 数据库全栈整合是上好佳佳佳呀1 小时前
MySQL 基础:从数据库概念到表结构管理DDL