IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    JavaScript - New之后发生了什么?

    发表于 2022-07-20 00:00:00
    love 0

    new

    new运算符允许开发人员创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

    • 1、创建一个 空对象 ,作为将要返回的对象实例
    • 2、将这个空对象的原型,指向了构造函数的 prototype 对象
    • 3、将函数的 this 指向这个空对象,执行构造函数的代码(为这个新对象添加属性)
    • 4、判断函数的返回值类型。

    具体实现

    function myNew(Func, ...args) {
     // 1.创建一个新对象
     const obj = {}
     // 2.新对象原型指向构造函数原型对象
     obj.__proto__ = Func.prototype
     // 3.将构建函数的this指向新对象
     let result = Func.apply(obj, args)
     // 4.根据返回值判断
     return result instanceof Object ? result : obj
    }
    

    测试如下

    function Person(name) {
     this.name = name
    }
    
    const p1 = new Person('p1')
    const p2 = myNew(Person, 'p2')
    
    console.log('p1', p1 instanceof Person) // -> true
    console.log('p2', p2 instanceof Person) // -> true
    


沪ICP备19023445号-2号
友情链接