构造函数在 "builder pattern" 中的 class 的多个实例中运行一次
Constructor runs once in multi-Instantiates of a class in "builder pattern" in react app
我的 React 应用程序中有一个 class,它使用 'Builder Pattern',我已将其导入我页面的一些嵌套组件中。例如在父组件和子组件中也是如此。
但它似乎调用了一次 class 的构造函数!在第二个实例化中,它具有我在预览实例化的预览中添加的现有数据。 (不是新的干净的实例化!)
// [Builder pattern]
class Requester {
constructor() {
this.definedHeaders = {}
console.log('construct', this)
}
contentType(contenttype) {
this.definedHeaders['Content-Type'] = contenttype
return this;
}
async get(url) {
// ...
}
async post(url, data = {}, isFormData = false) {
// ...
}
}
export default new Requester();
ES 模块仅在第一次导入时评估一次。此特征对所有 JavaScript 模块实现都是通用的。
因此,导出 class 实例是使 class 成为单例的常用方法。 class 本身未导出可防止创建其他实例。
如果不想有单个实例,则应导出 class 本身:
export default class Requester {...}
并在使用它的地方实例化:
import Requester from '...';
const requester = new Requester;
我的 React 应用程序中有一个 class,它使用 'Builder Pattern',我已将其导入我页面的一些嵌套组件中。例如在父组件和子组件中也是如此。
但它似乎调用了一次 class 的构造函数!在第二个实例化中,它具有我在预览实例化的预览中添加的现有数据。 (不是新的干净的实例化!)
// [Builder pattern]
class Requester {
constructor() {
this.definedHeaders = {}
console.log('construct', this)
}
contentType(contenttype) {
this.definedHeaders['Content-Type'] = contenttype
return this;
}
async get(url) {
// ...
}
async post(url, data = {}, isFormData = false) {
// ...
}
}
export default new Requester();
ES 模块仅在第一次导入时评估一次。此特征对所有 JavaScript 模块实现都是通用的。
因此,导出 class 实例是使 class 成为单例的常用方法。 class 本身未导出可防止创建其他实例。
如果不想有单个实例,则应导出 class 本身:
export default class Requester {...}
并在使用它的地方实例化:
import Requester from '...';
const requester = new Requester;