手写new操作符

<script>
          /*
          在调用new的过程中会发生以上四件事
          1,首先创建一个新的空对象
          2,设置原型,将对象的原型设置为函数的prototype对象
          3,将函数中的this指向这个对象,指向构造函数的代码(为这个新对象添加属性)
          4,判断函数的返回值类型,如果是值类型,就返回创建的对象,
             如果是引用类型,就返回这个引用类型的对象
          */
         function objectFactory(){
              let newObject = null
              let constructor = Array.prototype.shift.call(arguments)//查看伪数组中第一个参数
              let result = null
          //     判断参数是否是一个函数,如果不是返回错误
          if(typeof constructor !== "function"){
               console.log('type error')
               return
          }
          // 新创建一个空对象,对象的原型为构造函数的prototype对象
          newObject = Object.create(constructor.prototype)
          // 将this指向新建对象,并执行函数,result是函数执行后返回的结果
          result = constructor.apply(newObject,arguments)//newObject.contructor(arguments)
          // 判断返回对象,是值类型还是引用类型
          let flag = result && (typeof result === 'object' || typeof result === "function");
          // 判断返回结果
          return flag ? result : newObject;
         }
     //     使用方法
     objectFactory('构造函数','初始化参数')
     // 测试 :objectFactory(Object,[1,2])
     </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值