new 的原理是什么?通过 new 的方式创建对象和通过字面量创建有什么区别?

20,875次阅读
没有评论

共计 537 个字符,预计需要花费 2 分钟才能阅读完成。

在调用 new 的过程中会发生以上四件事情:

  1. 新生成了一个对象。
  2. 链接到原型。
  3. 绑定 this
  4. 返回新对象。

根据以上几个过程,我们也可以试着来自己实现一个 new

function create() {
  let obj = {}
  let Con = [].shift.call(arguments)
  obj.__proto__ = Con.prototype
  let result = Con.apply(obj, arguments)
  return result instanceof Object ? result : obj
}

以下是对实现的分析:

  • 创建一个空对象。
  • 获取构造函数。
  • 设置空对象的原型。
  • 绑定 this 并执行构造函数。
  • 确保返回值为对象。

对于对象来说,其实都是通过 new 产生的,无论是 function Foo() 还是 let a = {b : 1}

对于创建一个对象来说,更推荐使用字面量的方式创建对象(无论性能上还是可读性)。因为你使用 new Object() 的方式创建对象需要通过作用域链一层层找到 Object,但是你使用字面量的方式就没这个问题。

function Foo() {}
// function 就是个语法糖 
// 内部等同于 new Function()
let a = { b: 1 }
// 这个字面量内部也是使用了 new Object()

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计537字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)