Это нормально, чтобы поместить имя класса в конструктор другого класса, который выходит из "материнского класса"?
Нет. Правильный путь - твой второй фрагмент. Однако, если BrickBlue
жестко кодирует некоторые реквизиты, нет необходимости передавать их в конструктор:
class BrickBlue extends Brick {
constructor(x,y,width,height,type,speed){
super(x,y,"blue.jpg",width,height,type,10,speed)
}
}
Если вы ищете что-то вроде
class BrickBlue extends Brick {
constructor(args-of-Brick)
такой вещи нет.
Но это выглядит ужасно, и я хочу улучшить его.
Да, длинные списки аргументов безобразны, и, поскольку JS еще не поддерживает именованные аргументы, вы мало что можете сделать. Однако вы можете рассмотреть возможность группировки связанных аргументов в отдельные объекты:
class Brick {
constructor(position, graphic, size, type, behaviour)
, где position
- это что-то вроде {x:10, y:20}
и т. Д.
Другой вариант - предоставить полный список аргументов для объекта, имитируя именованные аргументы:
class Brick {
constructor({x, y, graphic, width, height, type, live, speed}) {
...
new Brick({
x: 1,
y: 2,
graphic: ...
...
})
и в производном классе:
class BrickBlue extends Brick {
constructor(args) {
super({
...args,
graphic: 'blue.jpg',
live: 10
})
}