new,你到底是怎么给我的对象?

前言

new 操作符就是返回一个对象,可内部到底是怎样的?


一、new一下就有对象

  1. 创建出新的对象,如obj.
  2. 把obj的__proto__指向构造函数的prototype对象 实现继承.
  3. 将this指向步骤1创建的对象obj.
  4. 返回创建的对象obj(如果该函数没有返回对象,则返回this)

二、自己来个new

这里只是模仿new构造函数得到一个对象.
目的是为了让大家更好的了解new的实现过程.
当然你不知道,并不影响写代码,只影响谈工资而已!


    function _new(...args) {
      const [constructor, ...otherArgs] = args;

      // 判断构造函数是否为function
      if (typeof constructor !== 'function') {
        throw new TypeError('constructor is not a function');
      };

      // 1.创建空对象
      const obj = {};

      // 2. 设置obj的原型对象为constructor的原型对象
      Object.setPrototypeOf(obj, constructor.prototype)

      // 3.将constructor中的this,指向obj,就第一步创建的空对象
      constructor.apply(obj, otherArgs);
      // 4 返回对象
      return obj;
    }

    function Test(x, y) {
      this.x = x;
      this.y = y;
    }

    var testObj = _new(Test, 1, 2);
    console.log(testObj);

别跑,据说给我一键三联的人写代码都没Bug!

我是飞翔,
愿您日有所长!

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值