如何解决这个循环依赖问题?

时间:2019-06-19 14:27:45

标签: javascript ecmascript-6

我有三个类:用户,帐户和模型。用户和帐户正在扩展Model类。

User.js:

import Model from '@/classes/Model'
export default class User extends Model {
  constructor(data) {
    super(data)
  }
}

Account.js:

import Model from '@/classes/Model'
export default class Account extends Model {
  constructor(data) {
    super(data)
  }
}

和Model.js:

import Account from '@/classes/Account'
import User from '@/classes/User'

export default class Model {
  static _classesMapping = {
    Account,
    User
  }

  constructor(data) {
    ...
  }

  static create(models) {
    return new Model._classesMapping[this.name](models)
  }
}

我想通过在Model中这样创建的静态方法创建Account和User实例:Account.create()

但是,编译时出现此错误:由于循环依赖问题,“超级表达式必须为null或函数”。 我不知道如何解决这个问题,而不必将类作为参数传递给这样的Model.create方法,我觉得这很丑

Account.create(data, Account)

2 个答案:

答案 0 :(得分:0)

我认为解决此问题的最佳方法是将classesMapping移至外部文件。

所以你得到

  • Model.js
    • User.js
    • Account.js
  • ClassMapping.js
    • 导入UserAccount并由Model.js导入

答案 1 :(得分:0)

  

我想通过在Model中创建的静态方法创建AccountUser实例,例如:Account.create()

好吧,您不需要任何_classesMapping。您可以通过this来访问构造函数,而无需通过其名称进行查找。

// Model.js:
export default class Model {
  constructor(data) {
    …
  }

  static create(models) {
    return new this(models)
  }
}

那只需删除依赖即可解决循环依赖问题:-)