new的时候做了什么

50 阅读1分钟
  1. 创建一个空对象
  2. 将这个空对象的__proto__连接到父类的prototype上
  3. 通过call方法将this绑定上下文
  4. 返回这个对象

function Per(name, age) { this.name = name this.age = age }

 function newFun() {
  const obj = {}               //1  创建空对象    
  obj.__proto__ = Per.prototype//2 将创建对象的__proto__ 指向父类的prototype
  Per.call(obj, ...arguments)  //3 绑定创建对象this上下文并且传参
  return obj
}
const per = newFun('12', 1)
console.log(per);// Per{name:'12',age:1}`
重点在于2,32.prototype 原型方法 
3.call 改变this绑定方法

如果跳过第二步 也能达到相同的效果

打印出{name:'12',age:1}

区别在于没有连接上Per构造函数

主要内容是原型链的知识与call修改this指向的知识