javascript - 基于原型(prototype)的 OO 与基于类的 OO 相比有哪些优势?

标签 javascript oop class programming-languages selflanguage

为什么基于类的 OO 而不是基于原型(prototype)的 OO 如此受欢迎?他们在学校教后者吗?尽管 Javascript 是基于原型(prototype)的,但大多数人主要在功能上使用它,或者通过试图模拟基于类的系统的框架。

我知道 Sun 对 Self 有一些研究- 关于基于原型(prototype)的面向对象还有其他知识来源吗?最好是可以自学的东西。

我找到一本包含已发表论文的书:Prototype-Based Programming: Concepts, Languages and Applications

有人读过吗?

--

因此,我悬赏了给我最多的答案。尽管如此,我还是不太满意。我希望听到更多技术性的答案。可能我没有解释清楚。

最佳答案

原型(prototype)继承的优势在于它可能允许以一种直接的方式进行奇特的元编程,因为原型(prototype)链很容易被操纵。这是一个相当学术的优势,因为元编程在 99% 的情况下都是错误的答案。例如,您可以拥有一个带有特殊 DSL 的 Javascript Key-Value Observer 样式的数据操作层,该 DSL 可以在离线时透明地在本地 SQLite 支持和在线时通过原型(prototype)交换在基于 REST 的服务器存储之间切换。我不确定这是最好的方法,但这是我这么晚能想到的最好的方法。这不是您通常希望在项目代码中做的事情,因为一旦您开始在多个层上进行这种间接寻址就很难调试,但是当您将它保存在库中时它还不错。

另一个不太有用的优点是它允许您设计自己的类系统。我说不太有用,因为或多或少所有 javascript 库在“类”的组合方式上都有自己稍微不兼容的方法。

有很多人将继承模型与在该模型中实现的语言混合在一起进行回复。 javascript 是动态的和弱类型的,因此很难使用工具这一事实与它是一种原型(prototype)语言无关。

关于javascript - 基于原型(prototype)的 OO 与基于类的 OO 相比有哪些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7159163/

相关文章:

c# - 面向对象范式 - C#

oop - 只写属性有实际应用吗?

flutter - Dart 私有(private)字段和 vscode 调试器

python - 通过 Tkinter 类传递数据帧

c++ - 类内类的访问方法

javascript - Chart.js - 在单杠内写标签?

javascript - 使用“下一个”按钮进行 z-Index 幻灯片放映

python - 在给定 Python 中的对象实例的情况下,如何计算出类层次结构?

javascript - jQuery - 使用全局函数

javascript - phonegap 中的 json 数组到 javascript