基于类的语言(如Java或Python)与基于原型的语言(如Javascript)之间的区别?

Ben*_*Ben 8 javascript python prototype class

可能重复:
基于原型与基于类的继承

这个问题前几天出现了 - 像Python这样的基于类的语言和像Javascript这样的基于原型的语言有什么区别?除了不同的方法,两种方式看起来非常相似,我们努力寻找基于类的语言可以做的基于原型的语言不能,或反之亦然.

任何人都可以详细说明或从根本上了解它们之间的差异吗?

我没有在网上找到很多差异,只是网站向您展示如何与另一个完成一个(例如:在JavaScript中使用原型模拟类)

任何启示赞赏!

jef*_*eff 6

看看这篇文章.这是一篇详细的文章,讨论了基于类和基于原型的语言之间的差异.

表格的副本总结了差异:

基于类(Java)

  • 类和实例是不同的实体.
  • 使用类定义定义类; 使用构造方法实例化一个类.
  • 使用new运算符创建单个对象.
  • 使用类定义构造对象层次结构以定义现有类的子类.
  • 通过跟随类链继承属性.
  • 类定义指定类的所有实例的所有属性.无法在运行时动态添加属性.

基于原型(JavaScript)

  • 所有对象都是实例.
  • 使用构造函数定义和创建一组对象.
  • 相同.
  • 通过将对象指定为与构造函数关联的原型来构造对象层次结构.
  • 遵循原型链继承属性.
  • 构造函数或原型指定一组初始属性.可以动态地向单个对象或整个对象集添加或删除属性.


scy*_*ale 5

看起来你对实际的语言很熟悉,所以你知道有什么区别,对吧?我猜您是在更深层次,也许更“哲学”的层面上询问差异。

基于类的语言倾向于自上而下,从一般到特殊。经典示例是您定义“车辆”类,然后定义“汽车”、“火车”等子类。

相反,基于原型的语言倾向于从特定的开始,实际上从特定的实例开始并对其进行修改。

我喜欢这个:http : //steve-yegge.blogspot.ie/2008/10/universal-design-pattern.html

最后,这不是你是否可以在 JS 中进行继承的问题,或者你是否可以用一种语言而不是另一种语言来做一些事情。这是他们解决问题的方式的巨大差异。对于一个特定的问题,在基于原型的语言中与在基于类的语言中最好地利用语言特性的好的惯用解决方案可能会有很大不同。