在子类上调用super()javascript throw Error

时间:2016-06-12 05:28:23

标签: javascript node.js class ecmascript-6

我正在尝试学习 ES2015 JavaScript课程,我开始使用这样的代码:

文件: index.js

/* parent class */
class Thing {

 construct(){
    console.log("thing constructor");
 }

}

/* child class */
const Human =  class Human extends Thing {

 construct(){
   super();
 }

}


let Person = new Human();

file: package.json

{
  "scripts": {
    "serve": "nodemon index.js --exec babel-node"
  },
  "dependencies": {
    "babel-cli": "^6.9.0",
    "babel-preset-es2015": "^6.9.0"
  }
}

运行: $ npm run serve

但我得到了这个:

   SyntaxError: index.js: super() outside of class constructor (14:3)
      12 | 
      13 |  construct(){
    > 14 |    super();
         |    ^
      15 |  }

我在这里缺少什么?

节点版本: 6.2.1

2 个答案:

答案 0 :(得分:2)

构造函数的名称是constructor,而不是construct。请参阅MDN documentation

因此,construct被解释为普通方法。如错误所示,super只能在构造函数内部调用,而不能在普通方法中调用。

答案 1 :(得分:2)

原因是您使用construct关键字而不是constructorsuper()方法只能从类的constructor()调用,而不能在其他地方调用。这就是你收到错误的原因。

此外,您不需要将Human类指定为const,并且可以在类声明后直接使用它

let Person = new Human();

有关 ES6课程的详情,请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes



class Thing {
  constructor(){
   console.log("thing constructor");
  }
}

/* child class */
class Human extends Thing {
  constructor(){
    super();
  }
}

let p = new Human();