1. new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写
  1. function Foo(name){
  2. this.name = name
  3. }

构造函数的执行过程

  1. 当以 new 关键字调用时,会创建一个新的内存空间,为实例对象。
  2. 函数体内部的 this 指向该实例对象。
  3. 给 this 添加属性,就相当于给实例添加属性。
  4. 默认返回 this

手写new

  1. //new 做了两件事
  2. //1.将新创建的对象的原型指向构造函数的原型 user.__proto__ = User.prototype
  3. //2.改变this的指向,指向新生成的对象
  4. function User(name){
  5. this.name =name
  6. }
  7. function myNew(fun,...args){
  8. let b = {}
  9. b.__proto__ = Object.create(fun.prototype)
  10. fun.call(b,...args)
  11. return b
  12. }
  13. let a = myNew(User,"jack")
  14. console.dir(a)