转载: 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。