字面量创建对象和new创建对象有什么区别,new内部都实现了什么,手写一个new

字面量:

  •  字面量创建对象更简单,方便阅读
  •   不需要作用域解析,速度更快

new内部:

  • 创建一个新对象
  • 使新对象的__proto__指向原函数的prototype
  • 改变this指向(指向新的obj)并执行该函数,执行结果保存起来作为result
  • 判断执行函数的结果是不是null或Undefined,如果是则返回之前的新对象,如果不是则返回result

手写new:

       

    // 手写一个new
    function myNew(fn, ...args) {
      // 创建一个空对象
      let obj = {}
      // 使空对象的隐式原型指向原函数的显式原型
      obj.__proto__ = fn.prototype
      // this指向obj
      let result = fn.apply(obj, args)
      // 返回
      return result instanceof Object ? result : obj
    }

Guess you like

Origin blog.csdn.net/m0_63873004/article/details/123609867