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方法中的参数仍然是可选的吗?如果这不是正确的方法,您建议我如何实现它?不,这并不是强制性的(除了查看函数算术的人),您只需通过未定义的。