当前位置: 首页 > 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 由外层作用域决定,不受上述规则影响。

相关文章:

  • 单片机——keil5
  • CUDA 归约求和(Reduction)算法
  • Java AQS(Abstract Queued Synchronized)深度解析
  • 使用 Arthas 查看接口方法执行时间
  • MVCC(多版本并发控制)机制
  • C++双线程交替打印奇偶数(活泼版)
  • 【java】aes,salt
  • CAN通信波特率异常的危害
  • K M G T P E Z
  • SAR ADC 比较器噪声分析(一)
  • 数据结构 - 数相关计算题
  • RabbitMQ集群与负载均衡实战指南
  • Blob文件导出:FileReader是否必需?✨
  • 静态资源js,css免费CDN服务比较
  • Nacos | 三种方式的配置中心,整合Springboot3.x + yaml文件完成 0错误 自动刷新(亲测无误)
  • 【C语言】函数指针及其应用
  • C++中单例模式详解
  • 使用 C/C++ 和 OpenCV 调用摄像头
  • Codeforces Round 1025 (Div. 2)
  • C++哈希
  • 网站建设要点/2022年传销最新消息
  • 西昌网站制作/代写文章的平台有哪些
  • 没有网站做cpa/国内新闻热点事件
  • b2c电商网站账户/能打开各种网站的浏览器
  • 哈尔滨最专业的网站建设/网站服务器一年的费用
  • 有产品做推广,选哪个 网站/东莞软文推广