js手写实现new关键字

直接上代码

function myNew() {
        // 创建一个空对象
        let obj = new Object(); 
        // shift删除数组第一个元素,并返回一个元素。原有arguments数组第一个参数是构造函数,返回值为构造函数。
        const Constructor = [].shift.call(arguments);
        // 将 obj 的原型指向构造函数,这样 obj 就可以访问到构造函数原型中的属性
        obj.__proto__ = Constructor.prototype;
        // 执行构造函数的方法
        const ret = Constructor.apply(obj, arguments);
        // 返回构造函数中有返回值且返回值是个引用类型,没有返回值则默认返回这个对象
        return typeof ret === 'object' ? ret : obj;
      }
      function Person(name, age) {
        this.name = name;
        this.age = age
        // 模拟有返回值且是个对象
        return {
          name: name,
          test: '测试'
        };
      }
      const a = myNew(Person, 'zh', 18);
      console.log(a.name);  // zh
      console.log(a.test); // 测试
      console.log(a.age); // undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>