ES6构造函数继承

时间:2015-08-23 17:48:21

标签: javascript ecmascript-6

我正在研究ES6,因为它在编写reactJS应用程序时似乎得到了提升。我对构造函数的工作方式感到有些惊讶:

class Human{ 
    constructor(name){ 
        this.name = name;
    }
    toString(){ 
        return "Name = " + this.name; 
    } 
}

class Person extends Human{} 

var person = new Person("kim"); 

使用基于类的系统在JS中编写前端应用程序时,以下其中一项可能会使我的应用程序变得脆弱:

  • 参数化构造函数是隐式继承的(总体来说这是一个好主意,它会保持这样的机会是什么?);
  • 在同一个类中重载构造函数的残障;
  • 基于参数类型的过载残疾;

可选问题
我遇到的第二个问题是,如今对于大型生产应用程序使用ES6的决策有多聪明,以及现在只使用ES6进行实验是否有用。我不确定是否错误地认为JS正在倾向于像Java一样完全成熟的基于类的系统,并且事情可能会比我的代码库能够消化更快(渐进)。

1 个答案:

答案 0 :(得分:6)

  

参数化构造函数是隐式继承的 - 这总体上是一个好主意,它会保持这样的机会是什么?

是的,它会保持这样。如果您没有提供构造函数,则默认情况下使用所有参数调用父构造函数。

这是一个好主意,因为class确实要求你在构造函数中调用super()(这至少对于继承构建是必要的,并且无论如何都是一个好的做法)。如果没有默认构造函数,则必须自己明确地提供它,这会导致样板代码增加(class关键字的目标是避免这种情况)。

  

在同一个类中重载构造函数的残障;基于参数类型的过载能力

没有。当然,在JS中,你不能有一个类的多个构造函数,但是you can still overload it,它们都包含传递参数的数量及其类型。

  

ES6准备就绪?

是。该标准被采用,没有更多的实验。 Transpilers确实支持所有主要的有用语法功能。

  

我不确定是否认为JS正在倾向于像Java这样完整的基于类的系统

是的,那是错误的。 JS没有类似Java的类系统,也几乎没有。另请参阅Will JavaScript ever become a 'proper' class based language?