Javascript 如何扩展构造函数+;在ES6中使用可选参数的方法?

Javascript 如何扩展构造函数+;在ES6中使用可选参数的方法?,javascript,ecmascript-6,web-audio-api,Javascript,Ecmascript 6,Web Audio Api,我想扩展这个类,这样我就可以支持多次播放声音。我想重写构造函数和start()/stop()方法,但我不知道如何以“正确”的方式进行重写,因为它们有可选的参数,并且MDN(,)上并没有提供所有的默认值。来自OOP语言,我希望找到更精确的方法签名,以便在此基础上进行构建,但我只能找到本机代码 那么最正确的方法是什么呢?如果您真的想扩展AudioBufferSourceNode,您可以这样做: class MyABSN extends AudioBufferSourceNode { con

我想扩展这个类,这样我就可以支持多次播放声音。我想重写构造函数和
start()
/
stop()
方法,但我不知道如何以“正确”的方式进行重写,因为它们有可选的参数,并且MDN(,)上并没有提供所有的默认值。来自OOP语言,我希望找到更精确的方法签名,以便在此基础上进行构建,但我只能找到本机代码


那么最正确的方法是什么呢?

如果您真的想扩展
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()命令
方法也可以跟踪连接。

您可以使用rest+spread语法或
参数
+
apply
原封不动地传递所有参数。对内置类进行子类化可能不是正确的方法。@Bergi如果我重写声明
start(a,b,c)的方法
然后调用
super.start(a,b,c)
我的重写方法中的参数不是必须的,而super方法中的参数仍然是可选的吗?如果这不是正确的方法,您建议我如何实现它?不,这并不是强制性的(除了查看函数算术的人),您只需通过
未定义的