[实现一个new关键字] | 刷题打卡

题目描述

实现一个new关键字

思路分析

new关键字用来创建对象。那么创建对象时都做了些什么

  • 创建了一个对象
  • 确定this的指向
  • 执行构造函数
  • 返回这个对象

代码实现

function newFn(ConstructorFn, ...args) {
  //创建一盒新对象
  let obj = {}
  //将__proto__指向构造函数的原型
  obj.__proto__ = ConstructorFn.prototype
  //执行构造函数,绑定this
  let res = ConstructorFn.apply(obj, args)
  //返回对象
  return typeof res === 'object' ? res : obj
}

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

var per1 = newFn(Person, '张三', 28)
// console.log(per1.__proto__ == per2.__proto__)
console.log(per1)
const per2 = new Person('李四', 29)
console.log(per2)
console.log(per1.__proto__ == per2.__proto__) //true,都指向构造函数的原型
复制代码

总结

需要理解原型链,这部分太复杂,给出两幅图自行感悟吧

image-20210417181419450

image-20210417181440110

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享