JavaScript在不使用React Native的情况下实例化类



我在React Native中有下一个问题:

我有下一个类,假设它是A,看起来像这样:

export default class A {
static shared = A.shared || new A()

constructor() {
console.log('in constructor')
testFunction()
}

testFunction = () => {
console.log('in test function')
}
testFunction2 = () => {
console.log('in test function 2')
}
}

我的A类在B类中使用,如下所示:

export default class B {
static shared = B.shared || new B()
makeAPIRequest = (parameters, valueCallback, errorCallback) => {
console.log('in B req')
A.shared.testFunction2()
}
}

App.js中使用的B类中的makeApiRequest函数如下:

const makeRequest = () => {
B.shared.makeAPIRequest(parameters, responseCallback => {
// do logic here...
}, errorCallback => {
// do logic here
})   
}

并且该makeRequest函数被放置为onPress动作。

我的问题是:在应用程序的第一次渲染时,我的constructorconsole.log和调用的函数console.log会在终端中打印出来。这不应该发生在我调用makeRequest之前吗?函数是App.js,它从实例化A类的B类调用makeAPIRequest

如果有人能向我解释这背后的逻辑,我将不胜感激。

A被实例化为其自身的静态依赖项,所以基本上这是在类加载后发生的,如果你想让它延迟实例化,你需要做一些事情,比如:

class A {
static get shared() {
if (!this.__instance) {
this.__instance = new this();
}
return this.__instance;
}
//....
}

最新更新