Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制台日志未从构造函数打印_Javascript_Class_Prototypal Inheritance - Fatal编程技术网

Javascript 控制台日志未从构造函数打印

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();

javascript中有三个继承类。当我在中间类中移除Super时,子构造函数不再打印控制台。但是当我把超级放在中产阶级时,所有的3个控制台日志都出现了。想知道为什么丢失的中间超级甚至取消了子控制台日志

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,因为否则将无法创建该构造函数的对象。我们会得到一个错误。