定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 类比:你在图像处理软件中使用“复制粘贴”功能,创建一个新的图像副本,所有属性都一样,但你可以独立修改副本 应用场景 创建新对象成本较高(比如需要初始化大量数据) 想避免使用重复的初始化代码 优缺点 优点: 克隆对象比创建新对象更高效,尤其是复杂对象 避免重复的初始化代码 缺点: 深克隆和浅克隆的问题 实现复杂的对象克隆时需要较多的工作 实现代码 interface Prototype { clone(): Prototype; } class ConcretePrototype1 implements Prototype { public primitive: any; public component: object; public circularReference: ComponentWithBackReference; public clone(): this { const clone = Object.create(this); clone.component = Object.create(this.component); clone.circularReference = { ...this.circularReference, prototype: { ...this }, }; return clone; } } class ComponentWithBackReference { public prototype; constructor(prototype: ConcretePrototype1) { this.prototype = prototype; } } function clientCode() { const p1 = new ConcretePrototype1(); p1.primitive = 245; p1.component = new Date(); p1.circularReference = new ComponentWithBackReference(p1); const p2 = p1.clone(); console.log(p1.primitive === p2.primitive); // true console.log(p1.component === p2.component); // false console.log(p1.circularReference === p2.circularReference); // false console.log(p1.circularReference.prototype === p2.circularReference.prototype); // false } clientCode();