Javascript 无法手动设置SpeechSynthesisVoice的原型

Javascript 无法手动设置SpeechSynthesisVoice的原型,javascript,speech-synthesis,webspeech-api,Javascript,Speech Synthesis,Webspeech Api,这个问题在某种程度上有助于理解原型get set 我有一个场景,需要将SpeechSynthesis支持的语音映射到谷歌翻译API支持的语言代码。 比如说, 现在,我可以通过获取voices运行时或存储语音并在javascript中的某些方法中硬编码映射来完成同样的工作。 如果我使用运行时方法,我需要在speechSynthesis.onvoiceschanged=()=>{}中调用getVoice(),然后映射在每个语音更改事件中调用的数字。所以,我想用硬编码 现在,当我将映射数组存储在一个

这个问题在某种程度上有助于理解原型get set

我有一个场景,需要将SpeechSynthesis支持的语音映射到谷歌翻译API支持的语言代码。 比如说,

现在,我可以通过获取voices运行时或存储语音并在javascript中的某些方法中硬编码映射来完成同样的工作。 如果我使用运行时方法,我需要在
speechSynthesis.onvoiceschanged=()=>{}
中调用
getVoice()
,然后映射在每个语音更改事件中调用的数字。所以,我想用硬编码

现在,当我将映射数组存储在一个变量中并通过索引调用它时,我会得到SpeechSynthesisVoice对象,就像我们在
getVoices()[index]
中所做的一样

此外,如果我将此对象值设置为
speechSynthesis.voice
,则会出现错误:

Uncaught TypeError: Failed to set the 'voice' property on 'SpeechSynthesisUtterance': The provided value is not of type 'SpeechSynthesisVoice'.
这是由于手动存储的对象值的原型不匹配造成的

比如说,

1。SpeechSynthesisVoice对象:

2。SpeechSynthesisVoice对象的手动存储值:

为了解决这个问题,我使用
getVoice()
获取SpeechSynthesisVoice对象的proto,然后将其设置为一个变量,然后将该变量设置为我的手动映射对象。 像

获取:

设置:

然后,它被设置好,如下面的屏幕截图所示:

我还尝试了
Object.setPrototypeOf()
,得到了相同的结果

现在,当我想再次将这个对象设置为
speechSynthesis.voice
时,我仍然会得到相同的错误,尽管我的原型匹配

任何人,请建议,如果有可能设置对象原型同样,并使用它?提前谢谢

voicePrototype = getVoices()[9].__proto__;
voices[index].SpeechSynthesisVoice.__proto__ = voicePrototype;