亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

要求/導入在繼承鏈上端已經導入的類是錯誤的嗎?

要求/導入在繼承鏈上端已經導入的類是錯誤的嗎?

牛魔王的故事 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 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號