原型设计模式在Js中的使用

原型设计模式

定义

  • 一种创建对象的设计模式,它允许通过复制现有对象来生成新对象,而无需依赖具体类的构造函数
  • 在该模式中,一个原型对象作为基础,当需要创建新对象时,通过复制该原型对象并进行适当的修改来生成新的对象实例。

核心概念

  • 在原型设计模式中,核心概念是原型对象克隆方法
  • 原型对象是要被复制的对象,它必须实现一个克隆方法,该方法能够返回一个与自身相似的新对象。
  • 通过调用克隆方法,可以生成一个新的对象,并根据需要进一步的修改

关于拷贝

原型设计模式可以通过浅拷贝深拷贝来实现对象的复制。

  • 浅拷贝只复制对象的基本属性值,而对于引用类型的属性,则仍然是共享的。
  • 深拷贝则会递归地复制所有对象及其引用的对象,从而完全独立地创建一个新的对象。

示例

typescript 复制代码
// 定义原型对象接口
interface Prototype {
  // 原型对象必须实现一个clone方法,用来返回一个与自身相似的新对象
  // 注意clone方法的返回值的类型是Prototype
  clone(): Prototype;
}

// 具体的原型对象实现类
class ConcretePrototype implements Prototype {
  // 私有属性,复制之后的对象应该和元对象具有相同的私有属性
  private property: string;

  constructor(property: string) {
    this.property = property;
  }

  public clone(): Prototype {
    // 创建一个新的对象并复制当前对象的属性值
    const clonedObj = new ConcretePrototype(this.property);
    return clonedObj;
  }

  public getProperty(): string {
    return this.property;
  }
}

// 使用原型对象的客户端代码
const originalObj = new ConcretePrototype("Original Property");

// 克隆对象
const clonedObj = originalObj.clone();
// 克隆对象的应该和源对象具有相同的属性
console.log(originalObj.getProperty());  // 输出:Original Property
console.log(clonedObj.getProperty());    // 输出:Original Property

// 在克隆之后,可以对细节进行修改
originalObj.property = "Modified Property";
console.log(originalObj.getProperty());  // 输出:Modified Property
console.log(clonedObj.getProperty());    // 输出:Original Property

应用场景

  • 当一个对象的创建过程很昂贵或复杂 时,可以使用原型模式来避免重复执行这些过程。
  • 当需要创建多个相似对象时,可以使用原型模式来节省时间和资源
  • 当一个对象需要有多个可变状态组合时,可以使用原型模式来方便地生成不同状态的对象。
  1. 原型链 :JavaScript 中的每个对象都有一个原型(prototype)属性,它指向另一个对象。通过原型链,在查找对象的属性和方法时,可以逐级向上访问原型对象,实现属性和方法的继承关系。
  2. Object.create() 方法 :该方法可以用于创建一个新对象,并将一个现有对象设置为新对象的原型。这样,新对象就可以继承原型对象的属性和方法。
  3. DOM 操作 :在浏览器环境中,通过 DOM 操作创建、复制或修改元素是常见的使用原型模式的例子。例如,可以使用 cloneNode() 方法来克隆一个 DOM 元素节点,从而生成具有相同属性和子节点的新元素。
相关推荐
崔庆才丨静觅4 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60614 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅5 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅5 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅6 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊6 小时前
jwt介绍
前端
爱敲代码的小鱼6 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax