在另一个对象的构造函数中创建新的ES6对象失败

时间:2018-10-08 13:11:07

标签: javascript ecmascript-6 es6-class

编辑该问题与How to extend a class without having to using super in ES6?不同-尽管答案是相关的,但这显然是一个不同的问题。它与一个特定的错误有关,涉及PersonCreationEvent的两个主要类实际上并不是彼此继承的。

我有两个ES6类,PersonCreationEventCreationEvent继承自Event)。我希望在创建new CreationEvent时创建一个new Person(因为CreationEvent是个人帐户历史记录中的事件的一部分)。

自行运行new CreationEvent()效果很好。但是我无法运行new Person()

即使使用简化版本的代码仍然失败:

class Event {
    constructor() {
        this.time = Date.now()
        this.tags = []
    }
}

class CreationEvent extends Event {
    constructor() {
        this.description = "Created"
    }
}

class Person {
    constructor(givenName, familyName, email) {
        var creationEvent = new CreationEvent()
    }
}  

运行new Person()返回

  

ReferenceError:访问'this'或从派生构造函数返回之前,必须在派生类中调用超级构造函数

如何在另一个Object的构造函数中创建一个新的ES6 Object?

1 个答案:

答案 0 :(得分:4)

您需要在super()类中调用CreationEvent,因为它扩展了Event类。像这样:

class CreationEvent extends Event {
    constructor() {
        super();

        this.description = "Created"
    }
}