开发者社区> 问答> 正文

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

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


【精品问答】前端面试手册

【精品问答】前端面试手册之JavaScript篇

展开
收起
前端问答 2019-11-24 20:14:13 1466 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

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

    • 新生成了一个对象
    • 链接到原型
    • 绑定 this
    • 返回新对象

    根据以上几个过程,我们也可以试着来自己实现一个 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()
    
    2019-12-17 07:46:59
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JAVA反射原理以及一些常见的应用 立即下载
继承与功能组合 立即下载
建立联系方法之一 立即下载