牛魔王的故事
2021-04-23 10:11:35
我有一個在Node.js應(yīng)用程序中使用的外部庫(Objection.js)。我創(chuàng)建了一個基礎(chǔ)模型類,Model為我的實體模型擴展了Objection的類:const { Model } = require('objection')class ModelBase extends Model { // implementation not important for this question}在擴展基礎(chǔ)的模型類中,有時,尤其是在對進(jìn)行編碼時relationMappings,我必須訪問Model基礎(chǔ)類上的屬性/枚舉。我可以在這樣的擴展模型中做到這一點: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行。這行得通,但我認(rèn)為這具有誤導(dǎo)性,因為BelongsToOneRelation它不是的成員ModelBase。在我看來,更明確,更正確的方法是Model從Objection導(dǎo)入/請求from,以便我可以BelongsToOneRelation從那里訪問該對象,例如:const { Model } = require('objection')// other code just like above until the relationMappings... relation: Model.BelongsToOneRelation我更喜歡這種方法。如果導(dǎo)入/需要繼承鏈中已經(jīng)存在的類,是否會引起問題,例如require循環(huán)或循環(huán)依賴的JavaScript版本?
2 回答

RISEBY
TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊
如果導(dǎo)入/需要繼承鏈中已經(jīng)存在的類,是否會引起問題,例如require循環(huán)或循環(huán)依賴的JavaScript版本?
不會。模塊將在首次需要時執(zhí)行,然后如果執(zhí)行完成,則exports
對象將被緩存,并且進(jìn)一步require()
s將返回相同的對象。
如果具有循環(huán)依賴關(guān)系,則require()
s之一將在模塊執(zhí)行之前返回導(dǎo)出對象,因此導(dǎo)出對象屆時將為空,但稍后將用屬性填充。
因此,即使循環(huán)依賴項也可能正常工作,但是如果失敗,則會使您頭疼,因此請務(wù)必盡量避免這種情況。

白豬掌柜的
TA貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊
我認(rèn)為這具有誤導(dǎo)性,因為
.BelongsToOneRelation
它不是ModelBase
實際上是:它是一個繼承的成員。
我更喜歡顯式導(dǎo)入超類并在那里訪問成員。是否會引起問題,例如require循環(huán)或循環(huán)依賴項的JavaScript版本?
不,不會。繼承層次結(jié)構(gòu)和范圍與模塊依賴性無關(guān)。
添加回答
舉報
0/150
提交
取消