Как передать опции в класс в классе? - PullRequest
0 голосов
/ 10 февраля 2019

Существует класс, который создает контейнер.Я использую его дважды, чтобы создать 2 контейнера, но хочу использовать его только один раз (и все же создать 2 контейнера).Когда я помещаю new Container() в метод класса, появляется бесконечный цикл (что очевидно).Как заставить класс сделать еще один (тот же)?

Могу поспорить, это возможно.Если да, есть ли возможность передать settings во второй класс, но НЕ в параметре?Может быть, другой метод первого класса, который я могу использовать во втором классе, но который использует this.options из первого класса?

Чтобы прояснить ситуацию, под "первым классом" я подразумеваю первый запуск класса Container и«вторым классом» - другой Container class, созданный внутри первого.

https://jsfiddle.net/rqhwsv2p/5/

class Container {
    constructor(element, className, settings) {
        this.init(element, className, settings);
    }

    init(element, className, settings) {
        var template = '<div class=' + className + '></div>';
        var container = $(template);

        element.append(container);

        if (settings) {
            this.settings = settings;

            this.getSettings();
            console.log('settings:::::', this.settings);
        }
    }

    getSettings() {
        return this.settings;
    }
}

var body = $('body');
var settingsOuter = {enable: true, visible: true, color: true};

var outer = new Container(body, 'container', settingsOuter);
var inner = new Container($('.container'), 'inner-container');

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете определить settings как параметр по умолчанию для class constructor

class Container {
    constructor(element, className, settings = {enable: true, visible: true, color: true}) {
        this.init(element, className, settings);
    }

    init(element, className, settings) {
        var template = '<div class=' + className + '></div>';
        var container = $(template);

        element.append(container);

        if (settings) {
            this.settings = settings;

            this.getSettings();
            console.log('settings:::::', this.settings);
        } else {
            this.settings = void 0;
        }
    }

    getSettings() {
        return this.settings;
    }
}
...