js new操作符


new操作符的执行过程:

  1. 在内存中创建一个对象

  2. 这个新对象内部的[[prototype]]特性被赋值为构造函数的prototype属性(所以创建的对象会具有构造函数原型上的属性与方法)

  3. 构造函数内部的this被赋值为这个新对象,即让this指向新对象。(所以构造函数中的this指向的是实例对象)

  4. 执行构造函数内部的代码(给新对象添加属性)

  5. 如果构造函数返回非空对象,则返回该对象,否则返回刚创建的新对象

    function Person(name,age){
          this.name = name
          this.age = age
          this.sayName = function(){
            console.log(this.name);
          }
          // new操作符调用时任然返回实例对象,作为普通函数调用时才会返回这句"你猜返回了什么"
          // return "你猜返回了什么" 
        
          //返回空对象时,new操作符调用这个构造函数返回的居然是个空对象,也就是下面的person1和person2都是{}???这与红宝书上面的描述不符(如有错误,望指正)
        	return {} 
        }
    
        const person1 = new Person('张三',18)
        const person2 = new Person('李四',19)
        console.log(person1);
    
js