js实现apply函数
实现 apply 函数
在 JavaScript 中,apply 是函数的一个方法,用于调用函数并指定 this 值和参数数组。以下是手动实现 apply 的方法:

Function.prototype.myApply = function(context, argsArray) {
context = context || window;
const fnSymbol = Symbol('fn');
context[fnSymbol] = this;
const result = context[fnSymbol](...argsArray);
delete context[fnSymbol];
return result;
};
实现原理
- 将函数设置为传入对象的属性,这样函数内部的
this就会指向该对象。 - 使用扩展运算符
...将参数数组展开为单独的参数。 - 调用函数并保存返回值。
- 删除临时添加的属性,避免污染对象。
- 返回函数调用的结果。
使用示例
function greet(greeting, punctuation) {
return `${greeting}, ${this.name}${punctuation}`;
}
const person = { name: 'Alice' };
// 原生 apply
console.log(greet.apply(person, ['Hello', '!'])); // "Hello, Alice!"
// 自定义 myApply
console.log(greet.myApply(person, ['Hi', '?'])); // "Hi, Alice?"
边界情况处理
- 如果
context为null或undefined,默认指向全局对象(浏览器中为window)。 - 如果
argsArray未提供,视为空数组。 - 使用
Symbol避免属性名冲突。
注意事项
- ES6 的
Symbol确保了属性名的唯一性,避免覆盖对象原有属性。 - 严格模式下,未指定
this时值为undefined而非全局对象。 - 此实现不支持类数组对象作为参数,仅支持真正的数组。






