ES6 Как обрабатывать статические свойства подкласса в суперклассе - PullRequest
0 голосов
/ 18 октября 2019
class Line extends Shape {
    static howToDrag = { point: 0, update: 'xy' }
    static config = { color: 'white' }
    render() {
        console.log('render based on this.config', this.config)
    }
}

class Shape {
    constructor({ config }) {
        this.constructor.howToDrag = expandProperty1(this.constructor.howToDrag)
        this.config = config || this.constructor.config
    }
    drag() {
        console.log('drag based on this.constructor.howToDrag ', this.constructor.howToDrag)
    }

}

function expandProperty1({ point, update }) {
    if (typeof update === 'string') {
        return {
            point,
            update: {
                [point]: update
            }
        }
    }
}

Вот код: Если вы можете понять, что я делаю, пропустите следующее объяснение и предоставили несколько советов о том, как лучше использовать ООП, потому что текущая реализация с моей точки зрения довольно сложна.

Проверьте http://canvas -chart.herokuapp.com / , чтобы увидеть, что я делаю, и я объясню приведенный выше код.

Давайте поговорим о статическихсвойство config первое. config должен принадлежать каждому экземпляру, т.е. каждый экземпляр должен иметь свой собственный config, почему я поставил его как static? Причина в том, что есть некоторая общая логика, связанная с config, то есть это должно быть значение, переданное из конструктора, в противном случае оно имеет значение по умолчанию. Установив config как static, я могу реализовать такую ​​общую логику в базовом классе, а не записывать ее снова и снова в каждом Derived классе

Другая проблема заключается в howToDrag, это настоящий static. Однако, static используется базовым классом, но определен в производном классе, это нормально? Более того, статическое свойство в производном классе видоизменено в базовом классе.

Нынешний логический смысл имеет смысл, но мне всегда интересно, является ли это способом ООП, потому что он опирается на тот факт, что this.constructor является точкой базового класса для производного класса.

...