js apply 实现
JavaScript 中 apply 的实现
apply 是 JavaScript 中函数原型的一个方法,用于在特定的作用域中调用函数,并允许传递参数数组。以下是 apply 的实现原理和模拟实现方式:
核心功能
apply 的主要功能是改变函数执行时的 this 指向,并以数组形式传递参数。其语法为:
func.apply(thisArg, [argsArray])
模拟实现
可以通过以下方式模拟 apply 的实现:

Function.prototype.myApply = function(context, args) {
// 如果 context 为 null 或 undefined,默认指向全局对象(浏览器中为 window)
context = context || window;
// 将当前函数(调用 myApply 的函数)作为 context 的一个属性
context.fn = this;
// 执行函数并保存结果
let result;
if (!args) {
result = context.fn();
} else {
result = context.fn(...args);
}
// 删除临时属性
delete context.fn;
// 返回结果
return result;
};
使用示例
function greet(name, age) {
console.log(`Hello, ${name}! You are ${age} years old.`);
console.log('this:', this);
}
const person = { country: 'China' };
// 使用原生 apply
greet.apply(person, ['Alice', 25]);
// 使用自定义 myApply
greet.myApply(person, ['Bob', 30]);
关键点说明
context是函数执行时的this指向对象。- 将函数赋值给
context.fn,通过对象调用函数的方式绑定this。 - 使用扩展运算符
...args将数组形式的参数展开为独立参数。 - 执行完成后删除临时属性
context.fn,避免污染对象。
边界情况处理
- 如果
context为null或undefined,默认指向全局对象(如window)。 - 如果
args未提供或为null,直接调用函数而不传递参数。
这种模拟实现方式可以帮助理解 apply 的工作原理,但实际开发中应直接使用原生 apply 方法以获得最佳性能。






