js实现call
实现 call 方法
在 JavaScript 中,call 是函数原型上的一个方法,用于显式绑定函数的 this 值并立即调用函数。以下是手动实现 call 的方法:

Function.prototype.myCall = function(context, ...args) {
// 如果 context 为 null 或 undefined,默认绑定到全局对象(非严格模式下)
context = context || window;
// 将当前函数(this)作为 context 的一个属性
context.fn = this;
// 调用函数并传入参数
const result = context.fn(...args);
// 删除临时属性
delete context.fn;
// 返回函数执行结果
return result;
};
使用示例
function greet(message) {
console.log(`${message}, ${this.name}!`);
}
const person = { name: 'Alice' };
// 原生 call
greet.call(person, 'Hello'); // 输出: Hello, Alice!
// 自定义 myCall
greet.myCall(person, 'Hi'); // 输出: Hi, Alice!
关键点说明
this绑定:通过将函数赋值给context的一个临时属性(如fn),实现this的显式绑定。- 参数处理:使用剩余参数
...args接收可变参数列表,并在调用时展开。 - 返回值:保留原函数的返回值。
- 清理临时属性:调用完成后删除临时属性,避免污染
context对象。
边界情况处理
context为null或undefined:非严格模式下默认绑定到全局对象(如window)。- 原始值调用:如果
context是原始值(如数字、字符串),会自动装箱为对象。






