应用: 实例化构造函数,也称new 一个对象

  1. function Person (name,age){
  2. this.name = name
  3. this.age = age
  4. }
  5. const xiao = new Person('小敏',12)
  6. console.log('xiao',xiao.name, xiao.age) // xiao 小敏, 12

手写new

  1. 新建一个空对象
  2. 新建对象的隐式原型指向构造函数的显示原型
  3. 改变构造函数中this指向并赋值
  4. 返回当前对象
    1. function F (name) {
    2. this.name = name
    3. this.age = age
    4. }
    5. function myNew (fn){
    6. let result = {} // 新建一个空对象
    7. let args = Array.prototype.slice.call(arguments,1) // 拿到传入的参数
    8. Object.setPrototypeOf(result, fn.prototype) // 将空对象的__proto__ 指向构造函数的prototype
    9. fn.apply(result, args) // 修改构造函数中this的指向,使其指向新建对象,并赋值
    10. return result // 返回当前新建对象
    11. }
    12. // 调用
    13. const user = myNew (F,'小敏', 12)
    14. console.log(user.name, user.age) // '小敏', 12
    15. console.log(user.__proto__ === F.prototype) // true