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

要求/导入在继承链上端已经导入的类是错误的吗?

要求/导入在继承链上端已经导入的类是错误的吗?

牛魔王的故事 2021-04-23 10:11:35
我有一个在Node.js应用程序中使用的外部库(Objection.js)。我创建了一个基础模型类,Model为我的实体模型扩展了Objection的类:const { Model } = require('objection')class ModelBase extends Model {    // implementation not important for this question}在扩展基础的模型类中,有时,尤其是在对进行编码时relationMappings,我必须访问Model基础类上的属性/枚举。我可以在这样的扩展模型中做到这一点:const ModelBase = require('./model-base')class SomeModel extends ModelBase {    static get relationMappings () {        const SomeOtherModel = require('./some-other-model')        return {            someOtherModel: {                relation: ModelBase.BelongsToOneRelation,                modelClass: SomeOtherModel,                // etc.            }        }    }}注意这一relation: ModelBase.BelongsToOneRelation行。这行得通,但我认为这具有误导性,因为BelongsToOneRelation它不是的成员ModelBase。在我看来,更明确,更正确的方法是Model从Objection导入/请求from,以便我可以BelongsToOneRelation从那里访问该对象,例如:const { Model } = require('objection')// other code just like above until the relationMappings...                relation: Model.BelongsToOneRelation我更喜欢这种方法。如果导入/需要继承链中已经存在的类,是否会引起问题,例如require循环或循环依赖的JavaScript版本?
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

如果导入/需要继承链中已经存在的类,是否会引起问题,例如require循环或循环依赖的JavaScript版本?

不会。模块将在首次需要时执行,然后如果执行完成,则exports对象将被缓存,并且进一步require()s将返回相同的对象。

如果具有循环依赖关系,则require()s之一将在模块执行之前返回导出对象,因此导出对象届时将为空,但稍后将用属性填充。

因此,即使循环依赖项也可能正常工作,但是如果失败,则会使您头疼,因此请务必尽量避免这种情况。


查看完整回答
反对 回复 2021-04-29
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

我认为这具有误导性,因为.BelongsToOneRelation它不是ModelBase

实际上是:它是一个继承的成员。

我更喜欢显式导入超类并在那里访问成员。是否会引起问题,例如require循环或循环依赖项的JavaScript版本?

不,不会。继承层次结构和范围与模块依赖性无关。


查看完整回答
反对 回复 2021-04-29
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

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