这个问题前几天出现了 - 像Python这样的基于类的语言和像Javascript这样的基于原型的语言有什么区别?除了不同的方法,两种方式看起来非常相似,我们努力寻找一种基于类的语言可以做的基于原型的语言不能,反之亦然。
任何人都可以详细说明或详细介绍它们之间的差异吗?
我没有在网上找到很多差异,只是网站向您展示如何与另一个完成一个(例如:Simulating classes with prototypes in JavaScript)
任何启示都赞赏!
答案 0 :(得分:6)
结帐this article。这是一篇详细的文章,讨论了基于类和基于原型的语言之间的差异。
总结差异的表格副本:
答案 1 :(得分:3)
您似乎对实际语言很熟悉,所以您知道区别是什么,对吧?我想你是在更深层次,也许更“哲学”的层面上询问这些差异。
基于类的语言往往从上到下,从一般到特定。经典的例子是你定义一个'Vehicle'类,然后是'Car','Train'这样的子类。
基于原型的语言倾向于从特定的语言开始,实际上从特定的实例开始并修改它。
我喜欢这样:http://steve-yegge.blogspot.ie/2008/10/universal-design-pattern.html
最后,这不是一个问题,你是否可以在JS中继承,或者你是否可以用一种语言而不是另一种语言来做。他们解决问题的方式有很大差异。对于一个特定的问题,一个好的惯用解决方案可以充分利用语言的功能,在基于原型的语言中与基于类的语言中的语言完全不同。
答案 2 :(得分:1)
MDN的JavaScript指南有一些好处,请看一下:https://developer.mozilla.org/en/JavaScript/Guide/Details_of_the_Object_Model
答案 3 :(得分:0)
嗯,他们(通常)都是完整的。 :)
类是关于强制执行封装,代价是一些(或很多)运行时可扩展性。原型鼓励封装,并允许几乎无限的运行时扩展。
严重的是,基于原型的OO使得从对象动态扩展/派生变得非常容易 - 有些人会说危险很容易。因此,原型语言不容易与静态类型共存。因此,如果您喜欢编译器如何捕获类型错误,您几乎肯定会排除基于原型的语言。
这里实际上有一个非常好的讨论:http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/虽然还有其他一些同样好的我喜欢那个。