当前位置: 首页 > news >正文

JavaScript 中的原型到底该如何理解?

  • JavaScript作为一个基于原型的OOP,和我们熟知的基于类的面向对象编程语言有很大的差异。如果不理解其中的本质含义,则无法深入理解JavaScript的诸多特性,以及由此产生的诸多“坑”。
  • 在讨论“原型”的概念之前,我们先来讨论一下“类”,也就是Java、C++等语言所使用的概念。
    在基于类的编程语言中,都要先抽象出一个“类”,用来统一表示同一种对象。然后用这个抽象类创建出一个个实例(泛化),也就是对象object。最后,类和类之间通过组合、继承等特性共建出一个可以互动的系统,从而用这套人为创建的系统来模拟、操纵现实中的物理世界。它的三大特性为:封装,继承,多态
  • 然而,在原型概念中,有很多不同之处。基于原型的编程范式提倡程序设计者关注实例对象的一系列行为,然后根据行为的不同划分出不同的原型,而不是事先抽象出一个类,再关注具体的对象。它最大的特点是可以动态修改对象的行为,具有高度灵活性。
  • 如果把基于类的对象称为“自上而下”式的顶层设计,那么基于原型的对象则可以被称为“自下而上”式的动态演化。
  • 基于原型的面向对象系统通过“复制”的方式来创建新对象,这实际上就是创建一个全新的对象。
    原型系统的“复制”操作有两种实现思路:
    1. 并不是真正的复制一个对象,而是使新对象持有一个原型的引用;
    2. 切实的复制一个对象,复制对象和被复制对象再无任何关联。
      JavaScript选择了前一种复制方式。

参考链接:

  1. https://ost.51cto.com/posts/1272   # JavaScript 中的原型到底该如何理解?2. https://zhuanlan.zhihu.com/p/99103505  # JavaScript中的类、原型、原型链、继承

在这里插入图片描述

http://www.lryc.cn/news/158972.html

相关文章:

  • 【MySQL基础】事务隔离03
  • 2023高教社杯数学建模C题思路分析 - 蔬菜类商品的自动定价与补货决策
  • 【MySQL】初见数据库
  • 选择合适的帧率和分辨率:优化RTSP流视频抓取(java)
  • HTTP协议都有哪些方法?
  • 数学建模--非整数规划求解的Python实现
  • LeetCode 48题: 旋转图像
  • 集成快递物流平台(快递100、快递鸟、闪送)连通多个应用
  • 搭建hadoop集群的常见问题及解决办法
  • virtualbox centos 使用NAT模式上网
  • 蓝桥杯官网填空题(梅森素数)
  • IBM Spectrum LSF Application Center 以应用程序为中心的工作负载提交和管理
  • 同步FIFO的verilog实现(2)——高位扩展法
  • 数据结构与算法面试
  • android studio cmake生成.a文件(静态库)及调用(c c++)静态库.a
  • 本地部署体验LISA模型(LISA≈图像分割基础模型SAM+多模态大语言模型LLaVA)
  • SpotBugs代码检查:instanceof总是返回true(BC_VACUOUS_INSTANCEOF)
  • Redis的Java客户端:Jedis入门
  • 【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策
  • idea:java: Compilation failed: internal java compiler error
  • 普罗米修斯(Prometheus)
  • JAVA面试题2012年版本
  • IED设备模型
  • HTTP代理如何设置
  • 【设计模式】单例设计模式
  • SpingBoot整合Sa-Token框架(1)
  • 软件测试技术题目大全【含答案】
  • C#__线程的优先级和状态控制
  • 103.36.167.X在服务器删除、复制文件的时候会出现卡的情况,是什么原因?
  • Vim 插件应用篇 vim-plug:简洁高效的Vim插件管理工具