JSFiddle - React, Tailwind, and code Playground

by Jason Green

JavaScript

function Facet(owner, config) {
    this.name = _.firstLowerCase(this.constructor.name);
    this.owner = owner;
    this.config = config || {};
    this.init.apply(this, arguments);
}

Facet.prototype.init = function Facet$init() {};


function FacetedObject() {
    var facetsConfig = this.facetsConfig || {};

    var facetsDescriptors = {}
        , facets = {};

    if (this.facetsClasses) {
        for (var facetName in this.facetsClasses) {
            var FacetClass = this.facetsClasses[facetName];
            var fctConfig = facetsConfig[facetName];
            facets[facetName] = new FacetClass(this, fctConfig);
            facetsDescriptors[facetName] = {
                enumerable: true,
                value: facets[facetName]
            };
        }
    }

    Object.defineProperties(this, facetsDescriptors);

    _.defineProperty(this, 'facets', facets);   

    if (this.init)
        this.init.apply(this, arguments);
}