new实现

  1. 新生成了一个对象
  2. 新对象隐式原型链接到函数原型
  3. 调用函数绑定this
  4. 返回新对象
const myNew = (fn, ...rest) => {
    const obj = {}
    obj.__proto__ = fn.prototype
    const res = fn.apply(obj, rest)
    if (res && typeof res === 'object' || typeof obj === 'function') {
        return res
    }
    return obj
}

function Fn(x) {
    this.x = x
}
const obj = myNew(Fn, 1)
  • 简易版
function myNew(fun) {
    let obj = {
      __proto__: fun.prototype
    }
    fun.apply(obj,Array.prototype.slice.call(arguments,1))
    return obj
}
posted @ 2020-05-26 12:41  671_MrSix  阅读(96)  评论(0编辑  收藏  举报