说起 工厂函数 和 构造函数,我相信大家都不会陌生,但是如果要深究它俩的区别时,其实还是存在很多需要注意的的点,因此本篇文章就准备深入聊聊它俩,废话不多说,开搞!
什么是工厂函数
它其实就是用来生产 相同属性 的对象的函数,通过它我们可以构造出许多 属性相同,但拥有 不同属性值 的对象,下面给出一个代码示例,直观感受下
1 | function factory(name,age){ |
从代码示例中我们可以知道它的生产过程如下
- 接受自定义属性值
- 新建一个对象
- 给新建的对象赋值自定义属性
- 返回新创建的对象
由于每次生产过程中,都会重新创建对象,因此每一次生产出来的对象都是全新的
什么是构造函数
构造函数的作用其实跟工厂函数很类似,都是用来生产新对象的函数,下面给出代码示例
1 | function Constructor(name,age){ |
从代码示例中我们可以知道它的生产过程如下
- 接受自定义属性值
- 将自定义属性赋值给 this
构造函数与工厂函数的区别
通过代码示例我们可以很容易知道它俩的区别如下:
- 工厂函数的使用不借助 new,而构造函数需要
- 工厂函数没有使用 this
- 工厂函数需要 明确 返回新对象,而构造函数不需要
究其根本,造成它俩的差异的根本原因是 new 和 this 这俩东西,因此我们需要搞清楚这俩的运行原理,才能真正明白两种模式的区别
new和this的运作方式
其实new做的事情很简单,流程如下
- 创建 一个新对象
- 将函数内部的this 指向 这个新对象
- 将 新对象的原型对象 指向 构造函数的原型对象
- 返回 this
这些步骤都是透明的,但每一次new的调用都会在背后补上上述操作,因此才会让构造函数的写法相比工厂函数更简洁,所以有句话说的好:哪有什么岁月静好,不过是有人替你负重前行
结语
工厂函数和构造函数在我们的日常开发中是会经常遇见的,因此一定要熟悉它俩,在合适的场景选用合适的方式,这样才能事半功倍~