推荐答案
-- -------------------- ---- ------- -------- ---------- -------- -------- - -- -- ------- - ---- - ------------------------ ------- ------- - ------- -- ------- -- - -- -- ------- ----- ---------- - --- -- -- ------- -- -- -------- ----- ------ - -------------------- -- -- ------- -- -- -- ------ ----------- -- ------ ------ ------- -
本题详细解读
1. 函数功能
myCall
函数模拟了 Function.prototype.call
的功能。它允许你在指定的 context
上下文中调用一个函数 fn
,并可以传递任意数量的参数 args
。
2. 参数说明
fn
: 需要调用的函数。context
: 函数执行时的上下文对象,即this
指向的对象。...args
: 传递给函数的参数列表。
3. 实现步骤
- 处理 context: 如果
context
是null
或undefined
,则默认使用全局对象(在浏览器中是window
)。 - 绑定函数: 将
fn
作为context
的一个属性,这样在调用时this
就会指向context
。 - 调用函数: 使用
context.fn(...args)
的方式调用函数,并传入参数。 - 清理属性: 调用完成后,删除
context
上的fn
属性,避免污染context
对象。 - 返回结果: 返回函数调用的结果。
4. 示例
-- -------------------- ---- ------- -------- --------------- - ------ ------------- --------------- - ----- ------ - - ----- ------- -- ------------------------- ------- ---------- -- --- ------- -------
在这个示例中,greet
函数在 person
对象的上下文中被调用,this.name
指向 person.name
,因此输出为 "Hello, Alice!"
。