js实现call


实现 call 方法
在 JavaScript 中,call 是一个重要的函数方法,用于改变函数的 this 指向并立即执行该函数。以下是手动实现 call 的方法:
Function.prototype.myCall = function(context, ...args) {
context = context || window;
const fn = Symbol('fn');
context[fn] = this;
const result = context[fn](...args);
delete context[fn];
return result;
};
代码解析
context = context || window;确保context有默认值,避免传入null或undefined时出错。const fn = Symbol('fn');创建一个唯一的属性名,避免与context原有属性冲突。context[fn] = this;将当前函数(this指向调用myCall的函数)绑定到context上。const result = context[fn](...args);调用函数并传入参数,获取返回值。delete context[fn];删除临时添加的属性,避免污染context对象。return result;返回函数执行结果。
使用示例
function greet(message) {
console.log(`${message}, ${this.name}`);
}
const person = { name: 'Alice' };
greet.myCall(person, 'Hello'); // 输出: Hello, Alice
注意事项
- 使用
Symbol确保属性名唯一性,避免覆盖context原有属性。 - 支持传入多个参数,通过剩余参数
...args实现。 - 兼容性处理:如果
context为原始值(如数字、字符串),需要转换为对象形式。






