【问题标题】:Global variables to different files and classes不同文件和类的全局变量
【发布时间】:2018-03-09 23:14:19
【问题描述】:

我有一个更大的对象,用于保存我的主类的所有重要数据。我的项目越来越大,所以我有一些单独的文件/类。他们都需要访问我的 store 对象,这些值会不时改变。

我知道我可以将我的存储导出/导入到每个类,但是更改有点超级全局,如果我多次实例化我的主类并在第一个实例化的主类中更改存储,那么第二个实例化的主类也会看到我的商店的变化。希望我能解释得足够清楚。

这是一个非常简单的示例,只有 2 个类,但我还有更多:

index.js

let ClassA = require('./ClassA')
let ClassB = require('./ClassB')

let store = {
    propA: 1,
    propB: 2
}

class mainClass {
    constructor() {
        console.log('main Class')
        this.doSomething()
    }

    doSomething() {
        let classA = new ClassA() // get/edit store there
        let classB = new ClassB() // get/edit store there

        classA.doSomething()
        classB.doSomething()
    }
}

let instantiatePorject = new mainClass()

ClassA.js

module.exports = class ClassA {
    doSomething() {
        // get/edit store here
    }
}

ClassB.js

module.exports = class ClassB {
    doSomething() {
        // get/edit store here
    }
}

【问题讨论】:

  • module.exports = () => { some: "state"}
  • 我想这对我没有帮助。

标签: javascript node.js ecmascript-6 ecmascript-5


【解决方案1】:

在构建对象时传入您的商店

let ClassA = require('./ClassA')
let ClassB = require('./ClassB')

let store = {
    propA: 1,
    propB: 2
}

class mainClass {
    constructor() {
        console.log('main Class')
        this.doSomething()
    }

    doSomething() {
        let classA = new ClassA(store) // get/edit store there
        let classB = new ClassB(store) // get/edit store there

        classA.doSomething()
        classB.doSomething()
    }
}

let instantiatePorject = new mainClass()

【讨论】:

  • Ty,这就是我不想做的,因为我的项目有点大。很多类,这个类里面有很多函数。当然我知道这个解决方案,但我希望有更清洁的东西。
  • 是的,它对于其他文件/类应该是全局的。
  • 所以你必须以某种方式传递这些信息。要么将对象传递给构造函数,要么通过其他函数,或者让类文件需要存储。
猜你喜欢
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多