我想知道我是否做得正确...
具有此代码:
class Room {
constructor(type, size, hasWindows, equipment) {
this.type = type;
this.size = size;
this.hasWindows = hasWindows;
this.equipment = ['esterillas', ...equipment];
};
};
class PilatesRoom extends Room {
};
const room1 = new PilatesRoom('pilates', 20, true, ['balón medicinal'])
console.log(room1);
//returns: PilatesRoom {type: "pilates", size: 20, hasWindows: true, equipment: Array(2)}
我的意思是...我真的不需要使用“构造函数”和“超级”来使其完美运行,但是当我在Internet上对其进行检查时,每个人都在使用它。我是不是该?例如:
class PilatesRoom extends Room {
constructor(type, size, hasWindows, equipment) {
super(type, size, hasWindows, equipment)
};
};
这将返回相同的结果。
我想了解!谢谢你们的时间。
答案 0 :(得分:1)
如果没有添加任何逻辑,则不必添加子类构造函数。 (实际上,静态分析和代码质量工具有时会将其标记为“无用的构造函数”并给出警告。)
一些程序员更喜欢构造函数的显式定义,有些可能会继承其他语言的习惯(可能需要它),等等。但是,除非子构造函数实际上为子类做一些事情,而不仅仅是将相同的值传递给子类。父构造函数,没有必要。
答案 1 :(得分:0)
要使用子类的构造函数时,必须使用super()
表达式。否则,您不必。就这么简单。
class PilatesRoom extends Room {
// the constructor should be removed (there is no point to keep it):
constructor(type, size, hasWindows, equipment) {
super(type, size, hasWindows, equipment)
};
};
在上面的代码中,没有理由定义构造函数。但是,在下面的代码中,您必须调用foo()
,因此,您还必须使用super()
:
class PilatesRoom extends Room {
constructor(type, size, hasWindows, equipment) {
super(type, size, hasWindows, equipment)
foo()
};
};
此处有更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super#Description
答案 2 :(得分:0)
更少的代码更多。因此,如果您的子类没有其他属性并且不需要特殊的初始化逻辑,请跳过它。如果您跳过它,则会得到默认的构造函数,这已经足够了。
您需要维护每一行代码。如果没有线路,就无需维护。
答案 3 :(得分:0)
据我所知,类构造函数只是javascript中的语法糖,因此您不必使用它。
还有MDN的解释:
“构造方法是一种用于创建和初始化使用类创建的对象的特殊方法。只能在类中只有一个名称为“ constructor”的特殊方法。SyntaxError将是如果该类包含一个以上的构造函数方法,则抛出该异常。
构造函数可以使用super关键字来调用超类的构造函数。“
如前所述,它可以存在或不存在。