前端手写(十五)——手写new的过程

x33g5p2x  于2022-03-31 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(400)

一、写在前面
我们如果想要手写new的实现过程,就必须要明白,当我们对一个构造函数执行new操作时,到底干了什么。

  1. 1、创建一个新对象。
  2. 2、让这个新的对象的原型指向该构造函数的原型对象。
  3. 3、执行构造函数,并且将构造函数指向新的对象。
  4. 4、拿到构造函数最后返回的结果,判断是否是对象或者函数,如果是的话,则直接
  5. 返回。如果不是则返回新创建的对象。

二、手写过程

  1. function createNew(con) {
  2. let result = Object.create(con.prototype)
  3. let args = [].slice.call(arguments, 1)
  4. let ret = con.apply(result, args)
  5. return ((typeof ret === 'object' && ret !== null) || typeof ret === 'function') ? ret : result
  6. }
  7. function Person(name, age, score) {
  8. this.name = name
  9. this.age= age
  10. this.score = score
  11. return {name:this.name}
  12. }
  13. let rest = createNew(Person, 'dmc', 21, 100)
  14. console.log(rest)

相关文章