Реализация комбинации частных и открытых свойств с составом объекта - PullRequest
0 голосов
/ 11 апреля 2019

Я впервые использую композицию вместо наследования, я предпочитаю это, но у меня есть одна проблема - как вы создаете объекты, для которых вы хотите сочетание открытых и закрытых свойств. Например, предположим, что вы хотите создать объект работоспособности, у которого есть метод setHealth (значение), который вы хотите сделать общедоступным, но вы также хотите, чтобы в этом объекте был закрытый метод flagDeath (), к которому нет доступа вне объекта, к которому создается. Работа, которую я сейчас использую, состоит в том, чтобы составлять объекты как к состоянию (частному), так и к базовому (общедоступному) объекту, объект состояния является закрытым с помощью замыканий, а базовый - нет, я продемонстрировал это ниже:

const createPlatform = (startX, startY, width, height, img) => {
    frameList.push(this);

    let state = { // Private properties
        width,
        height,
        img,
        pos:  new Coords(startX, startY),
    }

    Object.assign(state, canDraw(state, 1), canCollide(state)); // Assign private functionality

    let base = { // Public properties
        frameDo: function () {
            state.draw()
        }
    }

    return Object.assign(base); // Assign public functionality
};
...