猿问

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

我有一个在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版本?


牛魔王的故事
浏览 131回答 2
2回答

RISEBY

如果导入/需要继承链中已经存在的类,是否会引起问题,例如require循环或循环依赖的JavaScript版本?不会。模块将在首次需要时执行,然后如果执行完成,则exports对象将被缓存,并且进一步require()s将返回相同的对象。如果具有循环依赖关系,则require()s之一将在模块执行之前返回导出对象,因此导出对象届时将为空,但稍后将用属性填充。因此,即使循环依赖项也可能正常工作,但是如果失败,则会使您头疼,因此请务必尽量避免这种情况。

白猪掌柜的

我认为这具有误导性,因为.BelongsToOneRelation它不是ModelBase实际上是:它是一个继承的成员。我更喜欢显式导入超类并在那里访问成员。是否会引起问题,例如require循环或循环依赖项的JavaScript版本?不,不会。继承层次结构和范围与模块依赖性无关。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答