持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
前情提要
- 谈到原型二字,想必jym必然会想到js中的原型和原型链相关的概念,没错,这次讲的设计模式就是与之相关甚深的原型设计模式。
- 对于原型设计模式的应用其中之一就是js继承中的原型式继承。
- 原型设计模式主要解决了什么问题?
什么是原型设计模式?
- 原型模式属于创建型设计模式。
- 主要目的是用最小的代价创建对象。
- 创建一个全新的对象代价太高时,比如耗时太长时,性能开销相对较大,如果能直接从现有实例中以较小的代价克隆出一个对象那么会有很好的优化空间。
进阶
由上得知原型设计模式的主要用途之一就是:克隆。没错,上面也说到了创建一个对象的代价太高,而从实例中以较小的代价克隆一个对象将是最优的选择。
- 无论对于哪种开发语言而言,如果要实现原型设计模式,那么首先要满足的条件之一就是自带克隆接口。而JavaScript的克隆方法便是Object.create()
- Object.create(),接收一个对象,这个对象是用户想要克隆的对象。
- Object.create(),也可接收一个null,如果只是想创建一个空对象的话,那么传null就可以了,并且这种方法的性能是最好的。
- 对于Object.create()的实现,可以参考我之前写的JavaScript继承中的原型式继承。
- 除此之外要注意的点是Object.create()会对目标对象进行第一层的深拷贝,对于第二层便是浅拷贝了。
场景应用
当我们需要拷贝某个对象或者需要以某个对象为原型进行批量创建对象的时候,使用Object.create()将会使性能更好