前端手写代码面试题
目录

实现一个函数 myApply(fn, context, args),模拟 Function.prototype.apply

· 约 3 分钟读完 · 第 12 / 125 章

推荐答案

本题详细解读

1. 函数功能

myApply 函数模拟了 Function.prototype.apply 的行为。apply 方法允许你调用一个函数,并且可以指定 this 的值以及一个数组(或类数组对象)作为参数。

2. 参数说明

  • fn: 需要调用的函数。
  • context: 函数执行时的 this 值。如果为 null 或 undefined,则默认为全局对象(在浏览器中是 window)。
  • args: 一个数组或类数组对象,包含传递给函数的参数。

3. 实现步骤

  1. 处理 context: 如果 context 是 null 或 undefined,则将其设置为全局对象(在浏览器中是 window)。
  2. 将 fn 绑定到 context: 将 fn 作为 context 的一个属性,这样在调用时 this 就会指向 context。
  3. 调用函数: 使用 context.fn(...args) 调用函数,并传入参数。
  4. 清理: 删除 context 上的 fn 属性,以避免污染 context 对象。
  5. 返回结果: 返回函数执行的结果。

4. 示例

在这个示例中,greet 函数通过 myApply 调用,this 被绑定到 person 对象,并且传递了 ['Hello', '!'] 作为参数。