推荐答案
-- -------------------- ---- ------- -------- ------------------ -------- - -- -- ---------------------- ----- --- - ------------------------------------- -- -- --------- ---- ---------- ----- ------ - ---------------------- ------ -- -- ------------------------------- ------ ------ ---------- ------ - ------ - ---- -
本题详细解读
1. 创建新对象并设置原型
在 myNew
函数中,首先使用 Object.create(constructor.prototype)
创建一个新对象 obj
,并将其原型指向构造函数的原型。这一步模拟了 new
操作符的第一步,即创建一个新对象并将其原型设置为构造函数的 prototype
。
2. 调用构造函数并绑定 this
接下来,使用 constructor.apply(obj, args)
调用构造函数,并将 this
绑定到新创建的对象 obj
上。这一步模拟了 new
操作符的第二步,即调用构造函数并将 this
指向新创建的对象。
3. 处理构造函数的返回值
最后,检查构造函数的返回值 result
。如果 result
是一个对象(即 result instanceof Object
为 true
),则返回该对象;否则返回新创建的对象 obj
。这一步模拟了 new
操作符的第三步,即根据构造函数的返回值决定最终返回的对象。
总结
通过以上步骤,myNew
函数成功地模拟了 new
操作符的行为,能够正确地创建新对象、调用构造函数并处理返回值。