实现一个函数 myNew(constructor, ...args),模拟 new 运算符

推荐答案

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

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

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

本题详细解读

1. 创建新对象并设置原型

myNew 函数中,首先使用 Object.create(constructor.prototype) 创建一个新对象 obj,并将其原型指向构造函数的原型。这一步模拟了 new 操作符的第一步,即创建一个新对象并将其原型设置为构造函数的 prototype

2. 调用构造函数并绑定 this

接下来,使用 constructor.apply(obj, args) 调用构造函数,并将 this 绑定到新创建的对象 obj 上。这一步模拟了 new 操作符的第二步,即调用构造函数并将 this 指向新创建的对象。

3. 处理构造函数的返回值

最后,检查构造函数的返回值 result。如果 result 是一个对象(即 result instanceof Objecttrue),则返回该对象;否则返回新创建的对象 obj。这一步模拟了 new 操作符的第三步,即根据构造函数的返回值决定最终返回的对象。

总结

通过以上步骤,myNew 函数成功地模拟了 new 操作符的行为,能够正确地创建新对象、调用构造函数并处理返回值。

纠错
反馈