有很多文章和帖子解释了JavaScript继承是如何工作的,但是为什么使用原型继承而不是经典继承来实现JavaScript?
我喜欢JavaScript,所以我不是说这是件坏事......我只是好奇。
答案 0 :(得分:15)
以下是Brendan Eich对发生的事情的评价: http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html
正如我经常说的那样,正如Netscape的其他人所证实的那样,我被招募到Netscape,承诺在浏览器中“做一个方案”。至少客户工程管理包括Tom Paquin,Michael Toy和Rick Schell,以及一些名叫Marc Andreessen的人,他们确信Netscape应该以源代码的形式在HTML中嵌入一种编程语言。
来自高级工程管理层的diktat是该语言必须“看起来像Java”。这排除了Perl,Python和Tcl以及Scheme。
我并不自豪,但我很高兴我选择了Scheme-ish一流的功能和Self-ish(尽管是奇异的)原型作为主要成分。 Java影响,特别是y2k Date错误,但原始与对象的区别(例如,字符串与字符串)是不幸的。
答案 1 :(得分:12)
除非JavaScript的一位设计师停下来权衡,否则我们只能推测。话虽如此,这是我的看法:
JavaScript在解释时执行,因此没有将对象类型的声明与对象本身分开的概念。这是一种非常实用的方法。该实例在描述时就已存在 - 我们总是在活动实例上运行。因此,类的概念 - 或被动的“实例模板” - 没有真正的位置。
答案 2 :(得分:8)
JavaScript最初应该与Lisp非常相似。即使将语法更改为更接近C / Java,它仍然是Lisp in C's clothing。我认为答案在于它的功能性编程起源。在纯FP中,没有可变状态,这意味着没有可变对象。如果你稍微放松一下规则并稍微有点创意,你最终会得到像protypal inheritance这样的东西,即你可以扩展对象但不能修改原始对象。它提供与继承相同的功能,并且仍然为您提供了一些不变性。
最后,扭曲语言使其看起来像C ++和Java,以及中提琴,你有new someFunction()
,其余的是历史。
答案 3 :(得分:5)
因为它深受Self的影响。维基百科和ECMA规范都提到了这一点。
答案 4 :(得分:1)
我认为之所以选择它是因为它易于实现,不需要额外的关键字,用户无需了解它就能使用该语言。它比基于类的继承更强大,更灵活。
这是无类型语言的自然选择。基于类的继承的主要优点是它允许静态类型,从而进行类型检查和更快的基于表的查找实现。
答案 5 :(得分:1)
原型继承(带闭包)允许其他人做从未设想过的事情。这是几种范式的结合,这些范式已经结合在一起以实现通用编程。
使用原型语言,您可以为您的课程添加“混音”。您可以在没有特定语言关键字的情况下完成所需的封装级别。简而言之,原型语言非常棒。
我不想这么说,但是JavaScript,加上一些库,可以做我需要的一切。它在开发过程中是颠覆性的(应该服从Java)。在最简单的实现中,它具有很强的功能。
通过充分的学习/游戏,你将开始看到它灵感的优点。 JavaScript是少数几种有意隐藏“潜在”潜力的语言之一。如果你想知道“为什么”,你必须进入政界。但是,正是出于这个原因,它很棒。