es5构造函数是怎么生成对象的

89 阅读1分钟

new 构造函数是怎么生成对象的


      
      function Person(name,age,sex){
      this.name = name;
      this.age = age;
      this.sex= sex;
      }
      
      var person1 = new Person("小红",12,"nv");

构造函数能构造出函数的前提的是 new 。加new 构造函数是怎么生成对象的呢

即构造函数的内部原理是什么

当遇到new 关键字的时候

Person()函数内部会隐式的执行3步

函数的引用后面加()就是执行的意思,所以 new Person("小红",12,"nv");也是执行了这个函数,不过因为有new。所以在执行的时候会执行一些隐式的操作

  function Person(name,age,sex){
    1:  第一步创建一个this空对象  var this ={}
    2:   给这个this对象进行赋值
         {
         name:"小红",
         age:12,
         sex:'nv'
         }
      3: return this   隐式的返回这个this
      this.name = name;
      this.age = age;
      this.sex= sex;
      }

捣乱

   
      function Person(name,age,sex){
      this.name = name;
      this.age = age;
      this.sex= sex;
      
      return  {}    显式的返回一个空对象
      }
      
      var person1 = new Person("小红",12,"nv");
      
      console.log(person1)  输出的是{}
      
      返回引用对象会干扰 构造函数
      

function Person(name,age,sex){
      this.name = name;
      this.age = age;
      this.sex= sex;
      
      return  123     显式的返回一个原始值
      }
      
      var person1 = new Person("小红",12,"nv");
      
      console.log(person1)  输出的是就是该对象
      person1 {name: "小红", age: 12, sex: "nv"}

      
      返回原始值不会干扰 构造函数

** 结论:有new关键字,就不会返回原始值 **