Setter 和扩展 属性 同名
Setter and extended property same name
我正在创建一个 class 来处理 Audio
API 以简化一些行为并包装一些我想要的功能。我需要做的一件事是,当 set
为 volume
值时,我希望改变音量,但重点是我正在扩展音频 API 和 volume
是 API.
上已经存在的值
我知道我可以将 set volume()
更改为 setVolume()
但这看起来像是一个解决方案,我想知道是否有一种方法可以在没有这个的情况下设置该音量。
我尝试创建一个“别名”,类似于 vol
,但是使用该别名我想将 volume
设为私有,我再次不知道是否可以这样做带有和扩展的 prop.
我也试过这个,但会导致回调循环:
class MyAudio extends Audio {
set volume(vol) {
this.volume = vol;
}
}
有没有办法解决这个问题,保持音频的默认行为 API?
[编辑]
我想这样做的原因之一是,由于 Audio
API volume
只接受 number
作为参数,我想清理作为参数的字符串数据并设置带有已解析字符串的音量。
您能否直接使用 super
而不是 this
调用基础 class 的音量 属性?
参见下面的示例:
class MyAudio extends Audio {
get volume() {
return (super.volume * 100).toFixed(0);
}
set volume(vol) {
const value = Number(vol) / 100;
super.volume = value;
}
}
const myAudio = new MyAudio();
myAudio.volume = "57";
console.log('MyAudio volume', myAudio.volume);
const audio = new Audio();
audio.volume = 0.57;
console.log('Audio volume', audio.volume);
编辑:更新为包含可执行代码片段。
我正在创建一个 class 来处理 Audio
API 以简化一些行为并包装一些我想要的功能。我需要做的一件事是,当 set
为 volume
值时,我希望改变音量,但重点是我正在扩展音频 API 和 volume
是 API.
我知道我可以将 set volume()
更改为 setVolume()
但这看起来像是一个解决方案,我想知道是否有一种方法可以在没有这个的情况下设置该音量。
我尝试创建一个“别名”,类似于 vol
,但是使用该别名我想将 volume
设为私有,我再次不知道是否可以这样做带有和扩展的 prop.
我也试过这个,但会导致回调循环:
class MyAudio extends Audio {
set volume(vol) {
this.volume = vol;
}
}
有没有办法解决这个问题,保持音频的默认行为 API?
[编辑]
我想这样做的原因之一是,由于 Audio
API volume
只接受 number
作为参数,我想清理作为参数的字符串数据并设置带有已解析字符串的音量。
您能否直接使用 super
而不是 this
调用基础 class 的音量 属性?
参见下面的示例:
class MyAudio extends Audio {
get volume() {
return (super.volume * 100).toFixed(0);
}
set volume(vol) {
const value = Number(vol) / 100;
super.volume = value;
}
}
const myAudio = new MyAudio();
myAudio.volume = "57";
console.log('MyAudio volume', myAudio.volume);
const audio = new Audio();
audio.volume = 0.57;
console.log('Audio volume', audio.volume);
编辑:更新为包含可执行代码片段。