文章目录
- 一、`apply()` 与 `call()` 方法
- 1、核心概念
- 1.1、`call()` 方法
- 1.2、`apply()` 方法
- 2、使用示例
- 2.1、基本用法
- 2.2、处理 `this` 指向问题
- 3、`call()` 与 `apply()` 的区别
一、apply()
与 call()
方法
apply()
和 call()
都是 JavaScript 函数对象的方法,用于显式设置函数执行时的 this
值并调用函数。这两个方法功能相似,主要区别在于参数传递方式。
1、核心概念
1.1、call()
方法
function.call(thisArg, arg1, arg2, ...)
- 第一个参数:指定函数内
this
的值 - 后续参数:逐个传递函数参数
1.2、apply()
方法
function.apply(thisArg, [argsArray])
- 第一个参数:指定函数内
this
的值 - 第二个参数:以数组或类数组形式传递参数
2、使用示例
2.1、基本用法
function introduce(lang, experience) {console.log(`${this.name} 开发 ${lang} ${experience} 年`);
}const dev = { name: '张三' };
introduce.call(dev, 'JavaScript', 5);
introduce.apply(dev, ['Python', 3]);
2.2、处理 this
指向问题
const obj = {value: 10,getValue: function() {setTimeout(function() {console.log(this.value); }.call(this), 100); }
};obj.getValue();
3、call()
与 apply()
的区别
特性 | call() | apply() |
---|
参数传递方式 | 逐个参数传递 | 数组形式传递 |
性能 | 通常更快 | 略慢(需处理数组) |
适用场景 | 参数数量已知 | 参数数量动态/不确定 |