有很多文章和帖子解释了JavaScript继承是如何工作的,但为什么JavaScript使用原型继承而不是经典继承来实现?
我喜欢JavaScript,所以我不是说这是件坏事......我只是好奇.
以下是Brendan Eich对发生的事情的评价:http: //weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html
正如我经常说的那样,正如Netscape的其他人所证实的那样,我被招募到了Netscape,承诺在浏览器中"做一个Scheme".至少客户工程管理包括Tom Paquin,Michael Toy和Rick Schell,以及一些名叫Marc Andreessen的人,他们确信Netscape应该以源代码的形式在HTML中嵌入一种编程语言.
来自高级工程管理的diktat是该语言必须"看起来像Java".排除了Perl,Python和Tcl以及Scheme.
我并不自豪,但我很高兴我选择了Scheme-ish一流的功能和Self-ish(尽管是单一的)原型作为主要成分.Java影响,特别是y2k Date错误,但原始与对象的区别(例如,字符串与字符串),是不幸的.
除非JavaScript的设计者之一停下来权衡,否则我们只能推测.话虽如此,这是我的看法:
JavaScript在解释时执行,因此没有将对象类型的声明与对象本身分开的概念.这是一种非常实用的方法.该实例在描述时就已存在 - 我们总是在活动实例上运行.因此,类的概念 - 或被动的"实例模板" - 没有真正的位置.
JavaScript最初应该与Lisp非常相似.即使在将语法更改为更接近C/Java之后,它仍然是C语言中的Lisp.我认为答案在于它的功能性编程起源.在纯FP中,没有可变状态,这意味着没有可变对象.如果你稍微放松一下规则并稍微有点创意,你最终会得到像protypal inheritance这样的东西,也就是说,你可以扩展对象但不能修改原始对象.它提供与继承相同的功能,并仍然提供一些不变性.
最后,扭曲语言使其看起来像C++和Java,中提琴,你有new someFunction()
,其余的是历史.
因为它深受Self的影响.维基百科和ECMA规范都提到了这一点.