js call 实现


在 JavaScript 中实现 call 方法
call 是 JavaScript 中函数原型上的一个方法,用于显式绑定函数的 this 值并立即执行。可以通过手动实现来理解其原理。
基本实现思路
- 将函数设置为目标对象的属性。
- 使用目标对象调用该函数。
- 删除临时添加的属性,避免污染对象。
代码实现
Function.prototype.myCall = function(context, ...args) {
// 如果 context 为 null 或 undefined,默认绑定到全局对象(浏览器中为 window)
context = context || window;
// 将当前函数(this)作为 context 的一个属性
const fn = Symbol('fn'); // 使用 Symbol 避免属性名冲突
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' };
greet.myCall(person, 'Hello'); // 输出: "Hello, Alice"
关键点说明
context是调用函数时的this绑定目标。- 使用剩余参数
...args收集所有传入的参数。 Symbol用于生成唯一键,避免覆盖对象的原有属性。- 调用后删除临时属性,确保对象不被污染。
边界情况处理
- 如果
context是原始值(如数字、字符串),会被自动转换为对象形式。 - 如果不传
context,默认绑定到全局对象(非严格模式下)。






