Javascript 如何创建音频对象的副本

Javascript 如何创建音频对象的副本,javascript,Javascript,我的第一个想法是复制一个音频对象和复制任何其他对象一样简单。以下是三次都返回空对象的尝试: const audio = new Audio("test.wav") console.log( JSON.parse(JSON.stringify(audio)), Object.assign({}, audio), {...audio} ) 我错过了什么?我正在使用react,因此没有任何解决方案依赖于DOM操作。将创建一个新的DOM元素(如document.create

我的第一个想法是复制一个音频对象和复制任何其他对象一样简单。以下是三次都返回空对象的尝试:

const audio = new Audio("test.wav")

console.log(
  JSON.parse(JSON.stringify(audio)),
   Object.assign({}, audio), 
   {...audio}
   )

我错过了什么?我正在使用react,因此没有任何解决方案依赖于DOM操作。

将创建一个新的DOM元素(如
document.createElement('audio')
),并且您不能通过在常规javascript对象上使用的方法复制DOM元素;这就像试图复制
let p=document.querySelector('p')
像这样
让p_copy={…p}
。好吧,这行不通。检查下面代码段中的示例

const audio=新音频(“http://dl.music2p.ir/1397/12/Sasy%20-%20%20(128.mp3”);
audio.controls=true;
root.appendChild(音频);
//复制DOM元素的正确方法
设audioCopy1=audio.cloneNode(true);
root.appendChild(audioCopy1);
//走错路
让audioCopy2={…audio};//或其他深度复制方式
root.appendChild(audioCopy2);//休息
将创建一个新的DOM元素(如
document.createElement('audio')
),您不能通过常规javascript对象上使用的方法复制DOM元素;这就像试图复制
let p=document.querySelector('p')
像这样
让p_copy={…p}
。好吧,这行不通。检查下面代码段中的示例

const audio=新音频(“http://dl.music2p.ir/1397/12/Sasy%20-%20%20(128.mp3”);
audio.controls=true;
root.appendChild(音频);
//复制DOM元素的正确方法
设audioCopy1=audio.cloneNode(true);
root.appendChild(audioCopy1);
//走错路
让audioCopy2={…audio};//或其他深度复制方式
root.appendChild(audioCopy2);//休息

你能解释一下你想通过复制它来实现什么吗?谢谢你的回复。将其传递给子组件,并在不改变原始属性的情况下更新onended属性。具体更新是什么?你想在音频端做什么?这是一个为孩子们设计的游戏,他们点击与他们听到的声音对应的图像。该组件接收20个左右的audios对象作为在父组件中创建的道具。它还接收大约50个数组,每个数组对应一个包含5个单词的游戏“回合”。因此.onended的函数取决于它们是否正确。问题是,一个音频对应于他们单击的图像(需要.oned)和播放他们必须猜测的声音的按钮(不应该有oned功能),只是提到有库,如react sound或react audio player或任何其他react音频包装,您可以在其中透明地使用React组件。虽然我个人仍然使用本机API,所以我可以有足够的控制来确保它跨平台工作(特别是iOS点击事件黑客)。你能解释一下复制它想要实现什么吗?谢谢你的回复。将其传递给子组件,并在不改变原始属性的情况下更新onended属性。具体更新是什么?你想在音频端做什么?这是一个为孩子们设计的游戏,他们点击与他们听到的声音对应的图像。该组件接收20个左右的audios对象作为在父组件中创建的道具。它还接收大约50个数组,每个数组对应一个包含5个单词的游戏“回合”。因此.onended的函数取决于它们是否正确。问题是,一个音频对应于他们单击的图像(需要.oned)和播放他们必须猜测的声音的按钮(不应该有oned功能),只是提到有库,如react sound或react audio player或任何其他react音频包装,您可以在其中透明地使用React组件。虽然我个人仍然使用本机API,所以我可以有足够的控制来确保它跨平台工作(特别是iOS点击事件黑客)。