new 关键字的工作步骤

  1. 创建一个新的对象 obj
  2. 将对象与构建函数通过原型链连接起来
  3. 将构建函数中的 this 绑定到新建的对象 obj上根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理
const recodeNew = function (Func, ...args) {
    // 获取函数对象原型
    const obj = {}
    obj.__proto__ = Func.prototype
    // 绑定到新对象上执行
    const result = Func.apply(obj, args)
    // 判断 返回对象类型
    return result instanceof Object ? result : obj
}

// 以下是测试代码
function Person(name, age) {
    this.name = name
    this.age = age
}

Person.prototype.print = function () {
    console.log({"姓名": this.name, "年龄": this.age})
}
let p = recodeNew(Person, "小明", 18)
console.log(p)
p.print()

 

posted on 2024-09-16 10:11  XiSoil  阅读(6)  评论(0编辑  收藏  举报