js实现apply
实现 apply 方法
在 JavaScript 中,apply 是函数的一个内置方法,用于调用函数并指定 this 值和参数数组。以下是手动实现 apply 的方法:
Function.prototype.myApply = function(context, argsArray) {
context = context || window;
const fn = Symbol('fn');
context[fn] = this;
const result = context[fn](...argsArray);
delete context[fn];
return result;
};
代码解析
-
绑定上下文
context参数是函数执行时的this值。如果未提供,默认为全局对象(浏览器中是window)。 -
临时属性存储函数
使用Symbol创建一个唯一键,将当前函数(this)作为方法添加到context对象中。 -
执行函数并传递参数
通过展开运算符...将数组形式的参数传递给函数,并执行。 -
清理临时属性
删除临时添加到context上的函数属性,避免污染对象。 -
返回结果
返回函数执行的结果。
使用示例
function greet(message, punctuation) {
return `${message}, ${this.name}${punctuation}`;
}
const person = { name: 'Alice' };
console.log(greet.myApply(person, ['Hello', '!'])); // 输出: "Hello, Alice!"
注意事项
-
参数校验
如果argsArray不是数组或类数组对象,需要抛出错误或处理为默认值(如空数组)。 -
严格模式
在严格模式下,未指定this时,this为undefined而非全局对象,需调整默认值逻辑。 -
Symbol 兼容性
如果环境不支持Symbol,可以用随机字符串或时间戳作为临时属性名,但需确保唯一性。






