类在基于原型继承的语言中使用

时间:2014-11-21 20:13:29

标签: javascript inheritance prototypal-inheritance

following answer to this question很好地解释了classical inheritanceprototypal inheritance之间的差异。这是我感兴趣的,因为我开始使用Java,但转移到Javascript。

在他的回答中,他陈述prototypal inheritance,"关于课程的所有业务都消失了。如果你想要一个对象,你只需要写一个对象。"

然而,有很多文档和questions关于如何编写类"在Javascript。

为什么要推动语言不是。我正在寻找具体的例子,在这种原型语言中使用JS应用程序中的类更为明智,以及将方形钉固定在圆孔中的好处。正如Aravind所说的那样,为什么人们通过将Javascript与其他人进行比较来学习Javascript,而不是像其他人那样...而且为什么这种做法似乎被鼓励了呢?

底线问题:为什么要在ECMAScript 6中引入类?

6 个答案:

答案 0 :(得分:6)

群众喜欢上课。

原型遗传没有“更多”或“更少”自然,这完全是主观的。 JS就是它自己的语言,就像Smalltalk和Self对于它作为一个对象意味着什么有不同的看法。

ES6课程是语法糖。它们规范化/清理JS中如何使用继承/等。

与CoffeeScript类似,他们试图标准化如何在JS中完成OOP,并使那些不习惯原型继承的人更熟悉。

答案 1 :(得分:5)

  

为什么人们通过将Javascript与其他人进行比较来学习Javascript,而不是   有意吗?

这进入cognitive and learning theory,但简短的版本是人类喜欢熟悉的事物,我们学习的方法之一是将新想法与我们已有的知识联系起来。

  

为什么要在ECMAScript 6中引入类?

实际上,类是almost introduced in ECMAScript 4。我认为有很好的理由认为OOP是编写复杂软件的有用模式,而基于类的继承对于许多程序员来说比基于原型的继承更为熟悉。我认为同样有效的问题可能是"为什么当大多数学习它的人对基于类的继承更加满意时,JavaScript仍然会实现基于原型的继承?"

如果您对JavaSCript中的哪些类看起来很好奇,请查看基于类继承的ActionScript 3which is based on that draft of EMCAScript 4

当然,仅仅因为ECMAScript添加了类支持does not mean that JavaScript will,或者至少添加了it will any time soon

答案 2 :(得分:4)

我发现Zakas this article清楚地解释了它,它只是语法糖,并且在一天结束时Javascript将以相同的方式工作。

不要担心必须学习课程或不得不改变你的编程风格,没有任何改变。 :)

答案 3 :(得分:2)

为什么要在ES6中引入类?糖,语法的多样性。

答案 4 :(得分:1)

对于从面向对象语言(如Java)来到JavaScript的人来说,类是非常好的。

这是我已经多次做过的经历。我有许多拥有优秀Java开发团队的J2EE Web项目,他们具有一些 JavaScript知识,但并不多。我做的第一件事就是解释原型,原型继承以及如何使用原型实现OOP范例 - 基本上是伪古典继承。 (现在我经常在每个项目中都做一个“JavaScript for Java Developers”研讨会。)

通过这种方法,我大多看到了很好的代码。大多数Java开发人员倾向于坚持伪古典模式,并对此非常满意。这很可能不是JS ninjas会写的东西,但是,坦率地说,我不在乎。代码易于理解和维护,人们有一个良好的学习曲线,并且生产速度非常快。

答案 5 :(得分:0)

原型语言(如JavaScript)非常适用于不需要大量测试或维护的小规模短期项目。它们简单灵活的功能在这个领域真正闪耀。

另一方面,基于类的语言往往更加严格,需要更多的设置,这对于小东西来说并不是那么好,但额外的结构有助于保持较大的长期项目的可扩展性和可管理性。

JavaScript首次启动时,它的主要功能是操作静态DOM元素,这是原型语言的一个很好的应用程序。快速,灵活和简单 - 没有大惊小怪。然而,现在,JavaScript填充的角色要复杂得多,并且越来越多的应用程序而不是简单的脚本。将类添加到原型语言确实听起来有点滑稽,但添加的结构类以及它们的广泛熟悉可以非常容易地帮助开发团队处理现代JavaScript应用程序的复杂性。