首页 > 技术文章 > new实现

zhenjianyu 2020-05-26 12:41 原文

  1. 新生成了一个对象
  2. 新对象隐式原型链接到函数原型
  3. 调用函数绑定this
  4. 返回新对象
 1 function myNew(fn,...args){
 2     let obj = {}
 3     obj.__proto__ = fn.prototype
 4     // Object.setPrototypeOf(obj,fn.prototype) =>  Object.getPrototypeOf(obj) === fn.prototype
 5     let res = fn.apply(obj,args)
 6     // 防止构造函数主动return function或object
 7     if((typeof res === 'object' || typeof res === 'function') && res !== null){
 8         return res
 9     }
10     return obj
11 }
  • 简易版
function myNew(fun) {
    let obj = {
      __proto__: fun.prototype
    }
    fun.apply(obj,Array.prototype.slice.call(arguments,1))
    return obj
}

推荐阅读