Как я могу расширить конструктор + метод с дополнительными аргументами в ES6? - PullRequest
0 голосов
/ 26 октября 2019

Я хочу расширить класс AudioBufferSourceNode, чтобы я мог поддерживать воспроизведение звука несколько раз. Я хочу переопределить как конструктор, так и методы start() / stop(), но я не знаю, как это сделать "правильным" способом, поскольку они имеют необязательные аргументы и не все значения по умолчанию предоставляются в MDN ( 1 , 2 ). Исходя из ООП языков, я ожидал найти более точную сигнатуру метода, чтобы я мог опираться на это, но я мог найти только нативный код.

Так, каков наиболее правильный способ сделать это?

1 Ответ

0 голосов
/ 29 октября 2019

Если вы действительно хотите расширить AudioBufferSourceNode, вы можете сделать это следующим образом:

class MyABSN extends AudioBufferSourceNode {

    constructor (context, ...args) {
        super(context, ...args);
    }

    start (...args) {
        super.start(...args);
    }

    stop (...args) {
        super.stop(...args);
    }

}

В каждой функции args будет массив, содержащий необязательные аргументы функции. Тот факт, что я назвал этот массив args, это просто соглашение. Вы можете выбрать другое имя, если хотите.

Например, если вы вызываете start для экземпляра вашего класса, такого как myABSN.start(0, 2), массив args будет [ 0, 2 ], а метод - super будет называться super.start(0, 2).

Возможно, вы захотите переопределить методы connect() и disconnect(), чтобы отслеживать соединения.

...