Kasan Blog

  1. 创建临时对象/新对象
  2. 绑定原型 ( 创建共有属性 )
  3. 指定 this = 临时对象 ( 临时对象在new 里是没有命名的,所以需要把临时对象指定为this代表实例 )
  4. 执行构造函数( 创建私有属性 )
  5. 返回临时对象

要理解new 做了什么,先看不用new 需要做什么

function 士兵(ID){
  var 临时对象 = {}    //1.创建临时对象/新对象

  临时对象.__proto__ = 士兵.原型    //2. 绑定原型

  临时对象.ID = ID        // 4. 执行构造函数
  
  return 临时对象   //5. 返回临时对象
}

士兵.原型 = {
  兵种:"美国大兵",
  攻击力:5,
  行走:function(){ /*走俩步的代码*/},
  奔跑:function(){ /*狂奔的代码*/  },
  死亡:function(){ /*Go die*/    },
  攻击:function(){ /*糊他熊脸*/   },
  防御:function(){ /*护脸*/       }
}

像上面的,js之父帮你把流程简化了

用new 关键字,只需自己写私有属性和原型,就可以让构造函数拥有公有属性,且合理占用内存资源

new 就是把上面的创建临时对象,返回临时对象,绑定原型,指定 this = 临时对象,执行构造函数( 创建私有属性 )给简化

new就是以上操作的语法糖

function 士兵(ID){
  this.ID = ID   
  this.生命值 = 42
}

士兵.prototype = {
  兵种:"美国大兵",
  攻击力:5,
  行走:function(){ /*走俩步的代码*/},
  奔跑:function(){ /*狂奔的代码*/  },
  死亡:function(){ /*Go die*/    },
  攻击:function(){ /*糊他熊脸*/   },
  防御:function(){ /*护脸*/       }
}

const soldier = new 士兵(1)

示例