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,你当然是对的。我错过了。刚刚更新了我的答案