我想在子类中定义一个静态属性,并在父类(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/