【发布时间】:2010-10-23 09:32:50
【问题描述】:
在 JavaScript 中,每个对象同时是一个实例和一个类。要进行继承,您可以使用任何对象实例作为原型。
在 Python、C++ 等中,有类和实例作为单独的概念。为了进行继承,您必须使用基类创建一个新类,然后可以使用该类生成派生实例。
为什么 JavaScript 会朝着这个方向发展(基于原型的面向对象)?与传统的、基于类的 OO 相比,基于原型的 OO 有哪些优点(和缺点)?
【问题讨论】:
-
JavaScript 受到 Self 的影响,Self 是第一个具有原型继承的语言。当时经典继承风靡一时,最早是在 Simula 中引入的。然而经典继承太复杂了。然后David Ungar和Randall Smith在阅读了GEB之后有了一个顿悟——“最具体的事件可以作为一类事件的一般例子。”他们意识到面向对象编程不需要类。于是自我诞生了。要了解原型继承如何优于经典继承,请阅读以下内容:stackoverflow.com/a/16872315/783743 =)
-
@AaditMShah
GEB是什么/谁? -
@Alex GEB 是 Douglas Hofstadter 写的一本书。这是哥德尔·埃舍尔·巴赫的缩写。库尔特·哥德尔是一位数学家。埃舍尔是一位艺术家。巴赫是一位钢琴家。
标签: javascript oop inheritance prototype-programming