javascript - 使用父类(super class)的子类中定义的静态属性

标签 javascript node.js class

我想在子类中定义一个静态属性,并在父类(super class)中访问它。这可能吗?

错误消息显示:模型未定义

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

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

class Fieldset extends Model {
  static name = 'fieldset'
  static pluralName = 'fieldsets'
}

export default Fieldset

代码如下:

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

最佳答案

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

const model = FieldsetController.model;

静态成员(属性或方法)的特点是它们不绑定(bind)到类的任何实例。无需调用new Class()即可访问它们,而且不能通过实例访问它们。

更新

正如 @Mohammad Dehghan 在评论中所写,您应该避免出现循环依赖问题。因此更好的方法是删除 static 修饰符,并将模型传递给 super 函数:

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`)
  }
}

当你想调用index方法时,你需要初始化FieldsetController类:

const controller = new FieldsetController();
controller.index();

关于javascript - 使用父类(super class)的子类中定义的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60882480/

相关文章:

ruby-on-rails - Ruby on Rails - 从父类调用每个子类的方法

python - 在 Python 中导入值

javascript - 从数组中删除第一个元素并返回数组减去第一个元素

Javascript 切换菜单意外显示

javascript - colorbox IE 中的 google recaptcha 无法输入文本

node.js - 每个数据集的node js,连接数据库,异步执行选择、更新、插入查询

javascript - 在 WebStorm 上远程运行 node.js 应用程序?

javascript - 如何定义 Node.js 应用上下文路径?

node.js - 如何处理 mongoose 模型中 find 方法的回调结果

c++ - 使用聚合初始化器初始化类的模板(聚合类型)成员但没有额外的括号