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

Javascript 使用超类的子类中定义的静态属性,javascript,node.js,class,Javascript,Node.js,Class,我想在子类中定义一个静态属性,并在超类中访问它。可能吗 错误消息如下:未定义模型 我只想让我的FieldsetController了解型号Fieldset: import Model from './../../library/Model' class Fieldset extends Model { static name = 'fieldset' static pluralName = 'fieldsets' } export default Fieldset 代码如下所示:

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

错误消息如下:
未定义模型

我只想让我的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
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
library/controller.js:

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

class FieldsetController extends Controller {
  static model = Fieldset
}

export default FieldsetController
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;
静态成员(属性或方法)的特点是它们不绑定到类的任何实例。无需调用
new Class()
,就可以访问它们,而且不能通过实例访问它们

更新

正如@Mohammad Dehghan在评论中所写的,存在循环依赖的问题,您应该避免。因此,更好的方法是删除静态修改器,并将模型传递给超级函数:

class FieldsetController extends Controller {
  model = Fieldset

  constructor() {
    super(this.model)
  }
}
然后您需要在父类构造函数中定义它:

类控制器{
模型
建造师(模型){
this.model=模型;
}
索引(请求、响应){
//在这里你可以买到模型
const data=this.model.getAll()
response.render(`admin/${model.pluralName}/index`)
}
}
当您想调用索引方法时,需要初始化FieldsetController类:

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

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

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

更新

正如@Mohammad Dehghan在评论中所写的,存在循环依赖的问题,您应该避免。因此,更好的方法是删除静态修改器,并将模型传递给超级函数:

class FieldsetController extends Controller {
  model = Fieldset

  constructor() {
    super(this.model)
  }
}
然后您需要在父类构造函数中定义它:

类控制器{
模型
建造师(模型){
this.model=模型;
}
索引(请求、响应){
//在这里你可以买到模型
const data=this.model.getAll()
response.render(`admin/${model.pluralName}/index`)
}
}
当您想调用索引方法时,需要初始化FieldsetController类:

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

为什么?你的要求绝对有问题!准确地解释你想要达到的目标,这样我们可以帮助你。我已经更新了帖子为什么?你的要求绝对有问题!请准确解释您试图实现的目标,以便我们能够帮助您。我已经更新了POST的代码,OP需要为此将模块“库/控制器”引用为“字段集/控制器”,这很危险,因为它会产生循环依赖。@Mohamaddehan,您当然是对的。我错过了。刚刚更新了我的答案在他的代码中,OP需要为此将模块“库/控制器”引用为“字段集/控制器”,这很危险,因为它会产生循环依赖关系。@Mohammaddehgan,你当然是对的。我错过了。刚刚更新了我的答案