为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英4014372 2022-06-05 10:26:14
我想在子类中定义一个静态属性,并在超类中访问它。那可能吗?错误消息显示: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
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

您可以从代码中的每个位置访问静态属性:


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();


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信