【问题标题】:Can JavaScript be considered a class-based language?JavaScript 可以被认为是基于类的语言吗?
【发布时间】:2017-08-14 01:17:31
【问题描述】:

在 ES6 之前,JavaScript 无法创建类(我知道它有自己的创建方法,即构造函数……),它是一种基于原型的语言。

现在,在添加了类声明和新的继承方式之后,它可以被认为是像 Java 和 C++ 一样的基于类的语言吗?

【问题讨论】:

  • 你的意思是面向对象的语言?
  • 这绝对取决于“基于类”的含义。 ES6 类语法仍然使用原型继承创建对象。
  • JavaScript 已经是一种面向对象的语言,但不像其他语言那样基于类!
  • Javascript 不是也不能是基于类的语言。由于来自基于类的编程语言的人们的压力,类是语法糖。
  • ……以及新的继承方式”之类的?您已经回答了自己的问题:“ES6 类语法仍然使用原型继承创建对象。

标签: javascript oop ecmascript-6


【解决方案1】:

Javascript 是一种面向对象的语言,并且一直如此。

新的 ES6 类语法只是提供了一种更漂亮的方式来声明您在 ES6 之前的语言中已经可以做的事情(您只需手动配置现在为您完成的事情)。

新的 ES6 类语法仍然以与 ES5 和之前的对象完全相同的方式使用原型。所以,在幕后真的没有什么新鲜事。 ES6 将大多数开发人员已经在做的事情(定义对象、从其他对象定义继承等)编入实际的语言语法。

所以,ES6 类语法确实让开发人员更方便。它不会从根本上改变 Javascript 的功能或工作方式。

在 ES6 之前,javascript 无法创建类(我知道它有自己的方式来创建它们,它们是构造函数....),它是一种基于原型的语言。

这个说法有点误导。 ES6 仍然像 ES5 一样工作。它仍然使用原型。来自class 关键字的对象定义的创建方式与它们在 ES5 中的创建方式相同(使用原型)。我们现在有了一个内置的语法,而不是手动声明一个构造函数,然后向原型添加方法。因此,有语法上的改进,但在声明对象后它的工作方式并没有根本性的变化。

现在,在添加了类声明和新的继承方式之后,它可以被认为是像 Java 和 C++ 一样的基于类的语言吗?

不是真的。它仍然是一种基于原型的语言,甚至class 声明也只是最终构建了一个原型。我会说 Javascript 是非常面向对象的(一直都是)。在这方面,我不会尝试将它与 Java 和 C++ 进行比较,因为这有点像比较苹果和橘子。他们以不同的方式做事,没有客观或有用的基于类的“更多”或“更少”的绝对衡量标准。

我建议您花时间了解您知道或正在考虑学习的不同语言的优缺点,这样您就可以了解它们最适合用于什么,而不要花任何时间试图弄清楚哪个是“更多”或“比另一个好”。它们非常不同,都可以用来做各种各样的事情。根据各自的优势,工具包中的一些工具比其他工具更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2010-11-01
    • 2012-07-10
    • 2020-02-07
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多