Javascript 控制台日志未从构造函数打印
javascript中有三个继承类。当我在中间类中移除Super时,子构造函数不再打印控制台。但是当我把超级放在中产阶级时,所有的3个控制台日志都出现了。想知道为什么丢失的中间超级甚至取消了子控制台日志Javascript 控制台日志未从构造函数打印,javascript,class,prototypal-inheritance,Javascript,Class,Prototypal Inheritance,javascript中有三个继承类。当我在中间类中移除Super时,子构造函数不再打印控制台。但是当我把超级放在中产阶级时,所有的3个控制台日志都出现了。想知道为什么丢失的中间超级甚至取消了子控制台日志 class Great { constructor() { console.log('this is great'); } } class Grand extends Great { constructor() { // super();
class Great {
constructor() {
console.log('this is great');
}
}
class Grand extends Great {
constructor() {
// super();
console.log('this is grand');
}
}
class Father extends Grand {
constructor() {
super();
console.log('I am your father');
}
}
function main() {
let dad = new Father();
}
main();
我希望控制台显示这是伟大的,我是你的父亲。但是,在评论中产阶级的超级富豪时,唯一能显示的是这是grand。取消对grand class超级富豪的注释
在访问“this”或从派生构造函数返回之前,必须在派生类中调用超级构造函数
很好{
建造师{
console.log“这太棒了”;
}
}
班级大延伸{
建造师{
超级的
console.log'this is grand';
}
}
班长延伸到大{
建造师{
超级的
安慰。记录“我是你的父亲”;
}
}
主要功能{
让爸爸=新爸爸;
}
主要的
很好{
建造师{
console.log“这太棒了”;
}
}
班级大延伸{
建造师{
//超级;
console.log'this is grand';
}
}
班长延伸到大{
建造师{
//调用Grand构造函数及其console.log
超级的
//ReferenceError:在派生类构造函数中使用“this”之前必须调用超级构造函数
//大构造函数抛出一个错误,阻止执行下一行
安慰。记录“我是你的父亲”;
}
}
主要功能{
让爸爸=新爸爸;
}
主要的我以为在继承的类中不调用super是不可能的?您是否使用工具将ES6类编译为较旧的语法?您可以显示此行为的屏幕截图吗?或者您只是没有提到“this is grand”之后出现的错误吗?每当您创建从父级继承的类时,您必须在子级的构造函数中调用super以从父级拉入数据。我总是这样做,没有任何错误。当我试图调用编写的代码时,我也看到了错误-我认为在调用任何控制台日志之前遇到了错误…是的,上面是错误,所以我猜它不打印子控制台日志的原因是因为生成了一个错误。当一个普通构造函数运行时,它会创建一个空对象并将其分配给这个。但当派生构造函数运行时,它不会这样做。它期望父构造函数完成此工作。因此,如果我们要创建自己的构造函数,那么我们必须调用super,因为否则将无法创建该构造函数的对象。我们会得到一个错误。