ES6构造函数继承

5

我在研究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一样的完全成熟的基于类的系统发展,并且事物可能会比我的代码库更快地改变(演变)。

2
“brittle”是什么意思? - Bergi
2
如何出现“无法重载”? - Bergi
@Bergi 在Java中,我们学习到始终调用提供最多参数的构造函数,例如从具有较少参数的构造函数中调用Classname(name, 0, 0)。如果没有这种能力,后果不确定,而且在将来添加更多功能时需要重新编写代码的可能性是多少,我也不确定。 - html_programmer
2
不要把JavaScript和Java混淆。 - Bergi
1个回答

7
构造函数会隐式继承 - 这是总体上一个好的想法,那么它保持这样的机率有多大?
是的,它将一直保持这种状态。如果您没有提供构造函数,则默认调用具有所有参数的父级构造函数。
这是一个好主意,因为类确实强制您在构造函数中调用super()(至少对于继承内置函数而言是必要的,而且无论如何都是一个好习惯)。如果没有默认构造函数,您必须显式地自己提供它,这将导致样板代码增加(而class关键字的目标是避免这种情况)。
不能在同一类中重载构造函数;不能根据参数类型重载构造函数。
不。当然,在JS中,您无法为类拥有多个构造函数,但是您仍然可以基于传递的参数数量和它们的类型进行重载
ES6准备好投入生产了吗?
是。该标准已被采用,不再进行任何实验。转换器支持所有主要有用的语法特性。
我不确定是否错误地认为JS正在朝着像Java一样的完整的基于类的系统方向发展。
是的,那是错误的。JS没有像Java一样的类系统,也很难得到一个。另请参见JavaScript是否会成为“适当”的基于类的语言?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接