Men的博客

欢迎光临!

0%

手写实现 call 方法

手写实现 JavaScript 中的 call 方法

步骤:

创建一个新的函数对象,作为 call 方法的实现。

在新的函数对象中,将传入的第一个参数作为要调用的函数,将其保存在一个变量中。

使用 arguments 对象获取传入的参数列表,并将其转换为数组。

使用 apply 方法调用保存的函数,并传入第一个参数作为上下文对象(即函数中的 this 值),以及转换后的参数数组。

返回调用结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function.prototype.myCall = function (context, ...args) {
// 判断是否传入了上下文对象,如果没有,则使用全局对象(浏览器中为 window)
context = context || window;

// 将当前函数保存在变量中
const fn = Symbol('fn');
context[fn] = this;

// 使用 apply 方法调用函数,并传入上下文对象和参数数组
const result = context[fn](...args);

// 删除临时保存的函数
delete context[fn];

// 返回调用结果
return result;
};

// 示例用法
const person = {
name: 'John',
greet: function(message) {
console.log(`${message}, ${this.name}!`);
}
};

const otherPerson = {
name: 'Jane'
};

person.greet.myCall(otherPerson, 'Hello');
// 输出:Hello, Jane!

在 JavaScript 中,Symbol 是一种特殊的数据类型,用于创建唯一的标识符。它可以用于优化对象属性的访问和避免命名冲突。