Steve Yegge最近发布了一篇关于他称之为通用设计模式的有趣博客文章.在那里,他详细介绍了使用原型作为建模工具,而不是类.我喜欢与继承相比引入更少耦合的方式.但是,通过使用其他类而不是继承来实现类,这也可以通过类获得.是否有其他人有使用原型的成功故事,并且可以帮助解释使用原型与类相比有何优势.我想这归结为静态建模与动态建模,但更多的例子将非常受欢迎.
一个有趣的是,很容易使基于原型的语言成为OO,但很难使OO语言基于原型.
Alex Arnell的inheritance.js是一个简短而又甜蜜的代码块,它使JavaScript成为OO,完全可以访问父级"Class".
这是John Resig针对同一问题的解决方案之一:http://ejohn.org/blog/simple-javascript-inheritance/.
Lua中编程的第16章描述了Lua中的面向对象.具体来说,第16.2节给出了一个很好的继承示例.
除了你提到的构图与继承之外,还不完全清楚OO作为原型会是什么样子.
原型语言使复杂的继承行为变得容易.您可以实现多重继承,类似mixin的行为,或者只是从一个对象中选择要添加到另一个对象的内容.
维基百科的文章提到:"基于原型的编程的倡导者经常争辩说,基于类的语言鼓励开发模型首先关注类的分类和关系.相比之下,基于原型的编程被视为鼓励程序员专注于一些示例的行为,后来才担心将这些对象分类为原型对象,这些对象后来以类似于类的方式使用."
这并不是说原型范例都是优点而不是缺点.如果OO更具限制性,那是因为它选择了.如果你不小心,我可以看到所有灵活性可能会给你带来麻烦.