15

有很多文章和帖子解释了 JavaScript 继承是如何工作的,但是为什么 JavaScript 使用原型继承而不是经典继承来实现呢?

我喜欢 JavaScript,所以我并不是说它是坏事……我只是好奇。

4

5 回答 5

18

以下是 Brendan Eich 对所发生事情的看法: https ://brendaneich.com/2008/04/popularity/

正如我经常说的那样,正如 Netscape 的其他人所证实的那样,我被招募到 Netscape 的承诺是在浏览器中“执行 Scheme”。至少包括 Tom Paquin、Michael Toy 和 Rick Schell 在内的客户工程管理人员以及一些名叫 Marc Andreessen 的人都确信 Netscape 应该在 HTML 中嵌入一种源代码形式的编程语言。

高层工程管理部门的命令是该语言必须“看起来像 Java”。这排除了 Perl、Python 和 Tcl 以及 Scheme。

我并不骄傲,但我很高兴我选择了类似于 Scheme 的一流函数和 Self-ish(尽管是奇异的)原型作为主要成分。Java 的影响,尤其是 y2k 日期错误以及原始与对象的区别(例如,字符串与字符串)是不幸的。

于 2010-03-17T06:46:52.753 回答
9

JavaScript 最初应该与 Lisp 非常相似。即使在语法更改为更接近 C/Java 之后,它仍然是 C 外衣的 Lisp。我认为答案在于它的函数式编程起源。在纯 FP 中,没有可变状态,这意味着没有可变对象。如果你稍微放宽规则并稍微有创意,你最终会得到类似原型继承的东西,即你可以扩展对象但不能修改原始对象。它提供与继承相同的功能,并且仍然为您提供一些不变性。

最后,扭转语言,让它看起来像 C++ 和 Java,还有中提琴,你有new someFunction(),剩下的就是历史了。

于 2010-01-19T02:30:29.733 回答
6

因为它深受自我的影响。维基百科和 ECMA 规范都提到了这一点。

于 2010-01-19T02:36:11.360 回答
1

我认为选择它是因为它易于实现,不需要额外的关键字,并且用户不需要理解它就可以使用该语言。它也比基于类的继承更强大和灵活。

这是无类型语言的自然选择。基于类的继承的主要优点是它允许静态类型,从而允许类型检查和更快的基于表的查找实现。

于 2010-01-19T02:23:04.133 回答
1

原型继承(带有闭包)允许其他人做从未设想过的事情。它是几种范式的结合,它们结合在一起以实现通用编程。

使用原型语言,您可以为您的类添加“混合”。您可以实现所需的封装级别,而无需特定语言的关键字。简而言之,原型语言很棒。

我不想这么说,但是 JavaScript 和一些库可以完成我需要它做的一切。它的发展是颠覆性的(应该是从属于 Java 的)。在最简单的实现中,它具有很大的功能。

通过足够的学习/玩耍,您将开始看到它的灵感的优势。JavaScript 是少数有意“隐藏”其潜力的语言之一。如果你想知道“为什么”,就必须涉足政治。但是,正因为如此,它很棒。

于 2010-01-19T02:34:11.540 回答