描述new一个构造函数时发生了什么

本文深入探讨了JavaScript中new关键字用于构造函数时的工作原理,包括如何创建新对象、原型链的建立、上下文的切换以及返回新对象等关键步骤。通过实例解析,帮助读者掌握new操作符的本质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var obj1=new fun()

1.先创建一个空对象 var obj={}

2.将空对象的原型绑定为new操作符后面的构造函数的原型 obj.__proto__=fun.prototype

3.让this指向新创建的对象,并执行构造函数的函数体,创建相关属性和方法
 
4.判断执行结果是否返回了新的对象,如果有返回新对象,就是用返回的新对象,没有的话,返回原来创建的对象(obj)

//手动实现一个new操作符:

function newOpreator() {
      let constructor = [].shift.call(arguments) //截取传入函数的第一个参数,来获取构造函数
      var obj = {} //步骤<1> //定义一个空对象
      obj.__proto__ = constructor.prototype //步骤<2> //将obj的原型绑定为传进来的构造函数
      // 步骤<1>和步骤<2>和底下是等价的
      //var obj=Object.create(constructor.prototype)
      let result = constructor.apply(obj, arguments) //将this绑定为obj,并执行传进来的构造函数的函数体,创造相关属性和方法
      if (Object.prototype.toString.call(result) === '[object Object]') { //判断上一步函数的执行结果有无返回值,有返回值,并且是对象类型,就将返回的对象返回出去,作为构造函数的实例,
        return result
      }
      return obj //反之,就将obj返回,作为构造函数的实例
    }
    function Fun(name, age) {
      this.name = name
      this.age = age
    }
    var bb = newOp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值