Дочерний класс следует структуре родительского класса - PullRequest
0 голосов
/ 23 марта 2019

У меня есть два следующих класса:

class AcceptCommand extends Command {
    init(client, db) {
        super.init(client, db);
    }


    async hasPermission() {

    }

    async run() {
        if (this.hasPermission()) {

        }
    }
}

и

export class Command {
    init(client, db) {
        this.client = client;
        this.db = db;
    }

    setTrigger(trigger) {
        this.trigger = trigger;
    }

    getTrigger() {
        return this.trigger;
    }

    async hasPermission() {

    }

    async run() {
        if (this.hasPermission()) {

        }
    }
}

Я хочу, чтобы при запуске функции run () она сначала проверяла, есть ли у пользователя разрешения (this.hasPermission()).

В родительском классе Command Я делаю:

async hasPermission() {

}

async run() {
    if (this.hasPermission()) {

    }
}

Есть ли способ сделать это также применимым ко всем дочерним классам без необходимости делать то же самое в каждом дочернем классе?то же самое?

1 Ответ

1 голос
/ 23 марта 2019

Вы можете добавить другой метод, который будет выполняться, если hasPermission вернет true. И переопределить эту функцию в дочернем классе. Как это:

class Command {
    actionIfHasPermission () {
    	console.log('Command actionIfHasPermission')
    }

    async hasPermission() {
        console.log('Command hasPermission')
        return false
    }

    async run() {
        if (this.hasPermission()) {
            this.actionIfHasPermission()
        }
    }
}

class AcceptCommand extends Command {   		
    actionIfHasPermission() {
    	console.log('AcceptCommand actionIfHasPermission')
    }

    async hasPermission() {
    	console.log('AcceptCommand hasPermission')
        return true
    }
}

const instance = new AcceptCommand()

instance.run()
...