Setter 和扩展 属性 同名

Setter and extended property same name

我正在创建一个 class 来处理 Audio API 以简化一些行为并包装一些我想要的功能。我需要做的一件事是,当 setvolume 值时,我希望改变音量,但重点是我正在扩展音频 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);

编辑:更新为包含可执行代码片段。