从派生类访问属性

时间:2018-12-16 15:24:23

标签: javascript typescript subclass

abstract class Base {
  constructor() {
    console.log(this.components)
  }
  components = ['']
}
class Child extends Base {
  components = ['button', 'text']
}

const f = new Child()

运行此代码,我得到

[''] 

但是我想得到

['button', 'text']

从派生的类。 我要这样做的原因: 我要验证用户在Child中定义的“组件”属性。 不可能吗?

2 个答案:

答案 0 :(得分:1)

components属性是在基类中的构造函数被调用之后设置的:

abstract class Base {
  constructor() {
    console.log(this.components)
  }

  components = ['']
}

class Child extends Base {
  constructor() {
    // inherited components from base = ['']
    super() // Call base constructor

    // this.components = ['button', 'text']
  }

  components = ['button', 'text']
}

const f = new Child()

您需要等待基本构造函数同步完成,然后才能访问新值-即。通过使用setTimeout

constructor() {
  setTimeout(() => console.log(this.components))
}

理想情况下,您应该将组件作为参数传递:

abstract class Base {
  constructor(public components = ['']) {
    console.log(components)
  }
}

class Child extends Base {
  constructor() {
    super(['button', 'text'])
    // this.components = ['button', 'text']
  }
}

const f = new Child()

答案 1 :(得分:1)

尝试一下:

abstract class Base {
  constructor(components) {
    console.log(components)
  }
}
class Child extends Base {
  constructor() {
    super(['button', 'text'])
  }
}

const f = new Child()

abstract class Base {
  constructor(components) {
    console.log(components)
  }
}
class Child extends Base {

}

const f = new Child(['button', 'text'])