2016-06-12 74 views
1

我努力学习ES2015的JavaScript classses超(),我就开始这样的代码:调用子类的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(); 

文件:的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

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

而且你不需要指定Human类作为const并且可以直接使用它的类声明

let Person = new Human(); 

后,详细了解ES6类(ES)参考: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();

+0

答案太简单了,谢谢老兄 –

2

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

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

+0

OMG!所以该死的简单,谢谢 –