JavaScript中的类与函数构造函数

时间:2018-10-05 13:02:55

标签: javascript

背景:C#开发人员最近开始涉足javascript

以下是在JavaScript中创建对象的两种方法。它们之间有什么区别?创建对象时应该使用/优先使用哪种方法?为什么?

class John {
    constructor(name, birth, height) {
        this.name = name;
        this.birth = birth;
        this.height = height;} }

var Person = function(name, birth, height) {
    this.name = name;
    this.birth = birth;
    this.height = height;}

3 个答案:

答案 0 :(得分:2)

他们做的大致相同。 class语法是ES2015中引入的,为您做一些事情:

  • 它内置检查是否已在创建新对象的过程中调用了该函数,从而消除了没有new的情况下调用构造函数所允许的全部错误。

  • 它允许在构造函数和方法中使用super

  • 这比较简单,特别是如果您有子类。

  • 如果您执行诸如ErrorArray之类的内置子类,则容易得多(您可以不用class来完成)。< / p>

但是,如果您喜欢使用旧的语法,则可以不用class来完成所有操作。

当然,如果不通过Babel之类的工具转换为较旧的语法,就无法在IE等过时的浏览器上使用新语法。

(必须注意:在JavaScript的原型继承上使用类陷阱是一种样式选择,而不是必需的。如果愿意,您可以直接使用原型继承。)

您可能还会发现this answer很有用,将class语法与使用function语法进行的相同操作进行比较。

答案 1 :(得分:0)

在es6之前,构造函数是我们如何实现类结构和oop的方法。您仍然可以,但是作为C#开发人员,您将更习惯于类符号。只要浏览器支持es6。它们都是函数

答案 2 :(得分:0)

class语法是来自JavaScript的较新“版本”(称为ES6)的代码。

虽然之前使用过function声明,但被称为“原型”。

因此要回答您的问题,确定优先顺序,实际上取决于您要支持的浏览器。您可以使用caniuse检查浏览器支持:https://caniuse.com/#search=es6%20classes

来自C#,我认为对您来说最大的不同是对浏览器的支持。由于您不知道代码将在何处真正运行,因此应经常检查caniuse。

就像其他人提到的那样,有些编译器会减轻您的痛苦,例如bublébabel。但是,请注意它们具有各自的优点/缺点。这是我在该主题上找到的第一篇教程:https://scotch.io/tutorials/javascript-transpilers-what-they-are-why-we-need-them

话虽如此,欢迎来到JavaScript社区。