class use in a prototypal inheritance-based language
下面这个问题的答案很好地解释了
在他的回答中,他对
然而,关于如何用JavaScript"编写类"有很多文档和问题。
为什么要让语言变得与众不同。我在寻找在JS应用程序中使用类在这个原型语言中更为明智的具体例子,以及将方栓笨拙地安装到圆孔中的好处。正如Aravind所说,为什么人们通过与其他人比较来学习JavaScript,而不是按照预期……为什么这种做法似乎受到鼓励?
底线问题:为什么在EcmaScript 6中引入类?
群众喜欢阶级。
原型继承没有什么"多"或"少"的自然现象,这完全是主观的。JS是它自己的语言,就像smalltalk和self对于它是一个对象的意义有不同的想法。
ES6类是句法糖。它们规范化/清理继承/etc在JS中的使用方式。
与coffeescript类似,他们试图标准化面向对象编程在JS中是如何完成的,并使那些不习惯于原型继承的人更熟悉它。
Why are people learning Javascript by comparing it to others, and not
as it was intended?
这就进入了认知和学习理论,但简而言之的是,人类喜欢熟悉的事物,而我们学习的方式之一是将新观念与我们已有的知识联系起来。
Why are classes being introduced in ECMAScript 6?
实际上,在ECMAScript 4中几乎引入了类。我认为OOP是编写复杂软件的有用模式,而且基于类的继承比基于原型的继承更熟悉许多程序员。我认为一个同样有效的问题可能是"为什么JavaScript仍然实现基于原型的继承,当大多数学习它的人会更喜欢基于类的继承?"
如果您想知道JavaScript中的类可能是什么样子,请看一看ActionScript3,它是基于EMcascript4的草稿和基于类的继承的。
当然,仅仅因为ecmascript添加了类支持并不意味着javascript会,或者至少它会很快出现。
我发现Zakas的这篇文章很清楚地解释了这一点,它只是语法上的糖分,到最后,javascript也会以同样的方式工作。
不要担心必须学习课程或者改变你的编程风格,什么都不会改变。:)
为什么ES6中会引入课程?糖,属于各种句法。
对于面向对象语言(如Java)来JavaScript的人来说,类是非常好的。
这是我已经做过几次的经历。我有许多J2EE Web项目,它们具有良好的Java开发团队,他们拥有一些JavaScript知识,但并不多。我做的第一件事就是解释原型、原型继承以及如何使用原型实现OOP范式——基本上是伪经典继承。(现在我几乎在每一个项目中都会为Java开发人员做一个JavaScript。
通过这种方法,我基本上看到了很好的代码。大多数Java开发人员倾向于坚持伪古典模式,并且对它非常满意。这可能不是JS Ninjas会写的,但坦率地说,我不在乎。代码易于理解和维护,人们有一个良好的学习曲线,并且生产非常快。
原型语言,如javascript,对于不需要大量测试或维护的小规模、短期项目来说是非常好的。它们的简单和灵活的功能在这个领域中非常引人注目。
另一方面,基于类的语言趋向于更严格一些,需要更多的设置,这在小东西上没有那么好,但是额外的结构有助于保持更大的长期项目的可伸缩性和可管理性。
当JavaScript第一次启动时,它的主要功能是操纵静态的DOM元素,这对于原型语言来说是一个很好的应用程序。快速、灵活和简单——不必大惊小怪。然而,现在,javascript所扮演的角色比简单的脚本复杂得多,而且越来越像一个应用程序。向原型语言中添加类听起来有点滑稽,但是添加的结构类提供了,加上它们广泛的熟悉性,可以很容易地帮助开发人员团队处理现代JavaScript应用程序的复杂性。