@daniel_wesson

Как сгруппировать свойства через функцию-замыкания?

Может я некорректно сформулировал вопрос, но как по-другому его описать я затрудняюсь. В общем, можно ли в js преобразовать примерно это:
const components = (view) => {
    view.namespace('templates').group(() => {
        view.component('Home')

        view.namespace('catalog').group(() => {
            view.component('Product')
        })
    })

    view.namespace('sections').group(() => {
        view.component('Header')
    })
}

В это:
'./templates/Home'
'./templates/catalog/Product'
'./sections/Header'

Пока додумался только до такого:
const _this = {
    namespace: (a) => _this._createView('namespace', [a]),
    component: (a) => _this._createView('component', [a]),
    group: (a) => _this._createView('group', [a]),

    _createView (method, args) {
        const view = new View()
        view[method](...args)
        return view
    }
}

class View {
    constructor () {
        this.componentPath = './'
    }
    namespace (name) {
        this.componentPath += `${name}/`
        return this
    }
    component (component) {
        this.componentPath += component
        return this
    }
    group (closure) {
        // Не знаю что здесь писать
    }
}

components(_this)

Буду брагодарен за идею или напутствие. Возможно у меня всё неправильно, хочу почитать ваше мнение.
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы