使用在超类的子类中定义的静态属性

我想在子类中定义一个静态属性,并在超类中访问它。那可能吗?


错误消息显示:model is not defined。


我只想让我的 FieldsetController 了解模型Fieldset:


import Model from './../../library/Model'


class Fieldset extends Model {

  static name = 'fieldset'

  static pluralName = 'fieldsets'

}


export default Fieldset

代码如下所示:


字段集/controller.js:


import Controller from './../../library/controller'

import Fieldset from './model'


class FieldsetController extends Controller {

  static model = Fieldset

}


export default FieldsetController

库/controller.js:


class Controller {

  static index(request, response) {

    const data = model.getAll()

    response.render(`admin/${model.pluralName}/index`)

  }


  static create(request, response) {}


  static store(request, response) {}


  ...

}


export default Controller


慕桂英4014372
浏览 81回答 1
1回答

慕村9548890

您可以从代码中的每个位置访问静态属性:const model = FieldsetController.model;静态成员(属性或方法)的特点是它们不绑定到类的任何实例。不调用就可以访问new Class(),而且不能通过实例访问。更新正如@Mohammad Dehghan 在评论中所写的那样,您应该避免循环依赖的问题。所以更好的方法是删除静态修饰符,并将模型传递给超级函数:class FieldsetController extends Controller {  model = Fieldset  constructor() {    super(this.model)  }}然后你需要在父类构造函数中定义它:class Controller {  model;  constructor(model) {    this.model = model;  }  index(request, response) {    // here you can get model    const data = this.model.getAll()    response.render(`admin/${model.pluralName}/index`)  }}当您要调用索引方法时,您需要初始化 FieldsetController 类:const controller = new FieldsetController();controller.index();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript