call 实现 js
实现 JavaScript 的 call 方法
JavaScript 的 call 方法用于显式绑定函数的 this 值,并立即执行函数。可以通过以下方式手动实现 call:

Function.prototype.myCall = function(context, ...args) {
// 确保 context 是一个对象,如果是 null 或 undefined 则默认为全局对象(浏览器中为 window)
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是原始值(如数字、字符串),JavaScript 会将其转换为对象形式(如Number、String)。 - 在严格模式下,
context为null或undefined时,this会指向undefined。






