Конструктор запускается один раз в нескольких экземплярах класса в «шаблоне компоновщика» в приложении «Реакция» - PullRequest
0 голосов
/ 31 марта 2019

В моем приложении для реагирования есть класс, использующий «Шаблон построителя», и я импортировал его в некоторые вложенные компоненты на своей странице. например, в родительском компоненте и дочернем компоненте тоже.

Но, похоже, он вызывает конструктор класса один раз! и во втором экземпляре он имеет существующие данные, которые я добавил в превью в экземплярах превью. (Не новый и чистый экземпляр!)

// [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();

1 Ответ

0 голосов
/ 31 марта 2019

ES-модули оцениваются только один раз, когда они импортируются в первый раз.Эта черта является общей для всех реализаций модуля JavaScript.

Из-за этого экспорт экземпляра класса является распространенным способом сделать класс одиночным.Тот факт, что сам класс не экспортируется, препятствует созданию дополнительных экземпляров.

Если предполагается, что единого экземпляра не существует, сам класс должен быть экспортирован:

export default class Requester {...}

И создан вместа, где он используется:

import Requester from '...';

const requester = new Requester;
...