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

推荐答案

-- -------------------- ---- -------
-------- ----------- -------- ----- -
    -- -- ------- - ---- - ------------------------ -------
    ------- - ------- -- -------
    
    -- - -- -- ------- -----
    ---------- - ---
    
    -- ----------
    ----- ------ - --------------------
    
    -- -- ------- -- -- --
    ------ -----------
    
    -- --------
    ------ -------
-

本题详细解读

1. 函数功能

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

2. 参数说明

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

3. 实现步骤

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

4. 示例

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

纠错
反馈