🚀浅说new操作符的理解,手写一个new方法

📅 发布于 2025年12月 | 👤 作者:博主 | 🏷️ 标签:"new", Web开发, 前端, 面试

欢迎来到我的博客文章!所有文章都是满满的前端干货,文章简明扼要。

一、new本质

🌟 一句话核心: new 就是「造一个对象,并让构造函数为它打工」的过程。

  1. 先批一块地(空对象)
  2. 挂上统一招牌(继承原型)
  3. 派店长(构造函数)入驻装修、招人、定菜单(初始化)
  4. 店长可能说:“别开店了,我直接给你一栋现成商场!”(显式 return 对象)→ 那就用商场;否则就用你批的那块地。

二、举个完整例子

        
          // 🔹 Step 1: 批地 + 挂招牌
          const obj = Object.create(Car.prototype); 
          // obj = { __proto__: Car.prototype }

          // 🔹 Step 2+3: 派店长入驻装修
          Car.apply(obj, ['Tesla']); 
          // → 执行后 obj 变成:
          // {
          //   brand: 'Tesla',
          //   start: [Function],
          //   __proto__: Car.prototype
          // }

          // 🔹 Step 4: 店长没说“换地方”,就用这块地
          // Car 没 return → 返回 obj

          //关键转折:当构造函数 显式 return 时!
          function Car(brand) {
            this.brand = brand;
            
            // 👇 店长说:“别开店了,我直接给你一栋现成商场!”
            return { brand: 'BMW', type: 'Electric' };
          }

          const myCar = new Car('Tesla');
          console.log(myCar); 
          // { brand: 'BMW', type: 'Electric' }  ← 不是 Tesla!也没 start 方法!
          
       

三、 手写new方法:

        
          function _new(Fn, ...arg) {
            const obj = Object.create(Fn.prototype);
            const obj1 = Fn.apply(obj, arg);
            return obj1 instanceof Object ? obj1 : obj;
          }
          
       
← 返回首页