Javascript 原型与类

Javascript 原型与类,javascript,oop,prototype,Javascript,Oop,Prototype,史蒂夫·耶格(Steve Yegge)最近发表了一篇关于他所谓的通用设计模式的文章。在那里,他详细介绍了如何使用原型作为建模工具,而不是类。与继承相比,我喜欢这种引入较少耦合的方式。但是,通过用其他类而不是继承来实现类,我们也可以从类中获得这一点。其他人是否有使用原型的成功案例,并且可能有助于解释与类相比使用原型的优势。我想这可以归结为静态建模和动态建模,但更多的例子将是非常受欢迎的。原型是一种继承形式,只是对象直接从其他对象继承属性和行为,而不是从继承自其他类的类中获取属性和行为 例如,查看J

史蒂夫·耶格(Steve Yegge)最近发表了一篇关于他所谓的通用设计模式的文章。在那里,他详细介绍了如何使用原型作为建模工具,而不是类。与继承相比,我喜欢这种引入较少耦合的方式。但是,通过用其他类而不是继承来实现类,我们也可以从类中获得这一点。其他人是否有使用原型的成功案例,并且可能有助于解释与类相比使用原型的优势。我想这可以归结为静态建模和动态建模,但更多的例子将是非常受欢迎的。

原型是一种继承形式,只是对象直接从其他对象继承属性和行为,而不是从继承自其他类的类中获取属性和行为


例如,查看JavaScript中的任何面向对象代码。

一个有趣的地方是,基于原型的语言act OO很容易,但基于原型的OO语言act很难

  • Alex Arnell的是一段简短而甜美的代码,它使JavaScript成为OO,完成了对父“类”的访问
  • 以下是John Resig针对同一问题的解决方案之一:
  • 描述Lua中的对象定向。具体来说,本文给出了一个很好的继承示例
除了您提到的组合和继承之外,还不完全清楚OO作为原型会是什么样子

原型语言使复杂的继承行为变得容易。您可以实现类似于-的行为,或者只是从一个对象中拾取并选择要添加到另一个对象的内容

提到:“基于原型编程的倡导者经常争辩说,基于类的语言鼓励开发模型首先关注分类法和类之间的关系。相比之下,基于原型的编程被视为鼓励程序员关注某些示例集的行为,只是在以后才担心将这些对象分类为原型对象,这些原型对象后来以类似于类的方式使用。”


这并不是说原型范式都是有利的,也没有不利的。如果OO更具限制性,那是因为它选择了这样做。如果你不小心,我可以看出所有这些灵活性可能会让你陷入麻烦。

对于那些感兴趣的人来说,是(是)双语:您有原型,也有类。您可以选择是从类继承、从原型继承还是从两者继承。

从语义上讲,原型+委派==类+继承您有反向继承:OOP基于类的继承是原型的子集(是duck类型的子集)我想你误解了我。我是说原型是继承的一种形式,而类/子类是另一种形式。我并没有试图深入到“哪一种可以根据另一种实现”的问题。