Является ли конструктор унаследованным в JS ECMAScript 6?
Не совсем, нет. Но если вы не предоставляете конструктор вообще, механизм JavaScript предоставляет по умолчанию, который действует как унаследованный конструктор. (Не применимо к вашему примеру, вы предоставили конструктор в Dog
.)
Уилла собаки класса выглядят как это?
Нет. Поскольку вы определили конструктор в Dog
, механизм JavaScript ничего не сделает для вас; вам нужно определить конструктор Dog
и позвонить ему Something
через super
(и вы не можете использовать this
, пока не позвоните super
).
Ваш Dog
конструктор должен был бы либо принять x
и y
, или жёстко свои собственные (или вывести их из аргумента он получить):
Принимая их:
class Dog extends Something{
constructor(name, x, y) {
super(x, y);
this.name = name;
}
//...
}
жестко прописывать:
// Accepting them:
class Dog extends Something{
constructor(name) {
super(42, 57);
this.name = name;
}
//...
}
(или, конечно, принимаем только x
или y
и жёстко/вывести другой.)
Если вы не предоставите constructor
вообще, двигатель JavaScript adds one for you.
Для базовых классов, это выглядит следующим образом:
constructor() {
}
Для производных классов, это выглядит следующим образом:
constructor(...args) {
super(...args);
}
Это последний один почему я говорю, что это немного похоже на унаследованное конструктор, потому что в отличие от языков, таких как Java или C#, где конструктор по умолчанию не принимает аргументов и вызывает super
без аргументов, по умолчанию JavaScript по всем его аргументам.
Вам нужно создать его в явном виде с помощью 'super' в конструкторе Собачьего как' супер (х, у); ' – Andrey
Пробовали ли вы этот код? Это вызовет исключение, потому что вы оставили «супер». – loganfsmyth