当前位置: 首页 > news >正文

【JS进阶】JavaScript 中 this 值的确定规则

JavaScript 中 this 值的确定规则

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

当函数作为普通函数调用时,this 指向全局对象(浏览器中是 window,Node.js 中是 global),严格模式下是 undefined

function showThis() {console.log(this);
}showThis(); // 浏览器中: window / 严格模式下: undefined

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

当函数作为对象的方法调用时,this 指向调用该方法的对象。

const obj = {name: 'Alice',greet: function() {console.log(`Hello, ${this.name}`);}
};obj.greet(); // "Hello, Alice" - this 指向 obj

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

使用 call(), apply()bind() 可以显式设置 this 的值。

function greet() {console.log(`Hello, ${this.name}`);
}const person = { name: 'Bob' };greet.call(person); // "Hello, Bob"
greet.apply(person); // "Hello, Bob"const boundGreet = greet.bind(person);
boundGreet(); // "Hello, Bob"

4. new 绑定(构造函数调用)

使用 new 调用函数时,this 指向新创建的对象。

function Person(name) {this.name = name;
}const alice = new Person('Alice');
console.log(alice.name); // "Alice"

5. 箭头函数

箭头函数没有自己的 this,它会捕获所在上下文的 this 值。

const obj = {name: 'Charlie',greet: function() {setTimeout(() => {console.log(`Hello, ${this.name}`);}, 100);}
};obj.greet(); // "Hello, Charlie" - this 来自 obj

6. 事件处理函数

在 DOM 事件处理函数中,this 通常指向触发事件的元素。

button.addEventListener('click', function() {console.log(this); // 指向 button 元素
});

优先级总结

  1. new 绑定
  2. 显式绑定(call/apply/bind)
  3. 隐式绑定(方法调用)
  4. 默认绑定

箭头函数的 this 由外层作用域决定,不受上述规则影响。

http://www.xdnf.cn/news/719983.html

相关文章:

  • 软考-系统架构设计师-第六章 系统工程基础知识
  • 软考-系统架构设计师-第二章 嵌入式基础知识
  • 《Map 到底适合用哪个?HashMap、TreeMap、LinkedHashMap 对比实战》
  • 位图--Bitset【0基础详细版】
  • AI和大数据:是工具,还是操控人心的“隐形之手”?
  • Vue模板语法
  • 【大模型学习网络互联】Memory-Mapped I/O MMIO语义与MEM语义
  • 【Elasticsearch】exists` 查询用于判断文档中是否存在某个指定字段。它检查字段是否存在于文档中,并且字段的值不为 `null`
  • 【数据库】数据库的完整性
  • 2024 吉林 CCPC
  • 【25-cv-05855】Keith律所代理Paula Alejandra Navarro 版权图
  • RAG技术:私有大模型知识更新的最佳实践
  • 简述如果要存储用户的密码散列,应该使用什么字段进行存储?
  • 数据的类型——认识你的数据
  • SpringBoot使用MQTT协议简述
  • database disk image is malformed 的解决方法
  • C++ —(详述c++特性)
  • 行锁与表锁详解:原理、区别与面试要点
  • 63、【OS】【Nuttx】任务休眠与唤醒:sleep
  • 系统提示词:Google Stitch
  • 【笔记】suna部署之获取 Daytona API key 及 Daytona Sandbox 设置
  • 在力扣刷题中触摸算法的温度
  • Codeforces Round 1024 (Div. 2)
  • 山东省申报高级职称、正高级职称条件(工业、信息化方向)
  • 大数据如何赋能市场情报分析?——精准决策,从数据开始
  • echarts主题切换实现
  • 多模态融合新方向:光学+AI如何智能分拣,提升塑料回收率?
  • 基于卫星遥感数据识别互花米草及原生植被分布及生长的技术原理、关键方法
  • 利用TOA与最小二乘法直接求解
  • React从基础入门到高级实战:React 生态与工具 - React 国际化(i18n)