转载: https://lixuguang.github.io/2020/01/02/FE-guide-new/
作者: 李旭光
new 一个对象的过程
- 新生成一个对象
- 链接到原型
- 绑定
this - 返回新对象
在调用new的过程中会发生以上四件事,我们也可以试着来自己实现一个new
1 | // js代码 |
对与实例对象来说,都是通过new产生的,无论是function Foo() 还是 let a = { b : 1 }。
对于创建一个对象来说,更推荐使用字面量的方式创建对象(无论性能上还是可读性)。因为你使用new object()方式创建对象需要通过作用链一层一层找到object,但是你使用字面量的方式就没这个问题。
1 | // js代码 |
对于 new 来说,还需要注意下运算符优先级。
1 | // js代码 |
从上图可以看出,new Foo() 的优先级大于 new Foo ,所以对于上述代码来说可以这样划分执行顺序
1 | // js代码 |
- 对于第一个函数来说,先执行了
Foo.getName(),所以结果为 1; - 对于后者来说,先执行
new Foo()产生了一个实例,然后通过原型链找到了 Foo 上的 getName 函数,所以结果为 2。