New操作符做了什么

new 做了什么?

  1. 创建了一个空对象
  2. 将空对象的原型指向构造函数的原型
  3. 将这个空对象改变this的指向去调用这个构造函数
function Person(name, age) {
      this.name = name
      this.age = age
    }
    let person = Person('小唐', 26)
    console.log(person) // undefined
    console.log(window.age) // 26
    console.log(window.name) // 小糖

我们没有用new的时候,作为执行函数是返回值undefined,this此时指向的是window

let person = new Person('小唐', 26)
console.log(person) // Person {name: "小糖", age: 26}

当使用new操作符后,打印的person才是对象

模拟一个new

function _new(){
      console.log(arguments)
      let constructor = Array.prototype.shift.call(arguments)
      console.log(constructor) //取出构造函数
      console.log(arguments) // 剩下的参数
      let content = {} // 创建一个空对象
      content.__proto__ = constructor.prototype // 空对象的原型指向构造函数的原型
      constructor.apply(content,arguments) // 将这个空对象改变this的指向去调用这个构造函数
      return content
    }
    let person2 = _new(Person,'小糖',26)
    console.log(person2) //Person {name: "小糖", age: 26}

这时我们打印的person2与person 是一样的,简单模拟了new的操作,撒花~~~~

你可能感兴趣的:(New操作符做了什么)