是否可以从父类访问子类的属性?

时间:2016-05-17 22:26:33

标签: javascript typescript

我有一个用于定义存储关系函数的父类,以及一个在商店中定义其表的子类。在父类中,我定义了一个连接到实例表的save()函数,但该表是在子表上定义的。我想我可以设置父级的构造函数来接受孩子的tableName,但是我的linter抱怨在引用super之前必须调用this(即使我想将this上的属性传递给super。

这里是父母:

export class StoredObject {
    constructor(private tableName: string) {}

    public save() {
        store.collection(this.tableName) //...
    }
}

孩子:

export class Inventory extends StoredObject {
    tableName = "inventory";

    constructor(
        public myVar //...
    ) {
        super(this.tableName)
    }
}

我知道一个解决方案就是创建一个只返回this.tableName值的getter函数,但这似乎是hackish。我也知道我可以简单地将实际字符串放在super中(例如,在Inventory中,使构造函数为{ super("inventory") },但这似乎不够优雅。我怀疑有一种方法传统上实现了我想要做的事情,但我似乎无法找到它。

1 个答案:

答案 0 :(得分:4)

查看Ryan Cavanaugh's response here

具体来说,

  

初始化的顺序是:

     
      
  1. 初始化基类初始化属性
  2.   
  3. 基类构造函数运行
  4.   
  5. 初始化派生类初始化属性
  6.   
  7. 派生类构造函数运行
  8.   

您已经让超类负责初始化tableName属性,并且必须能够在创建子类之前执行此操作。您要么必须传递“库存”,要么改变这种关系。