将 webkitspeechRecognition 设置为状态并更改语言

Setting webkitspeechRecognition to state and changing language

所以,我设置了

let recognition = new SpeechRecognition;
recognition.continuous = true;
recognition.interimResults = false;
recognition.lang = 'en-US';

this.setState({
    recognition
});

console.log(this.state.recognition) 给我语音识别对象。 因为我不应该用 this.state.recognition.lang = 'ja-JP' 直接改变状态,所以我尝试创建一个新对象来将识别状态设置为:

let newObject = {...this.state.recognition, lang: 'ja-JP'}

但是,console.log(newObject) returns { lang: 'ja-JP' } 和其余属性不会被克隆。

这是 webkitspeechrecognition 的问题吗 api 是否有解决方法让它工作?

对象展开运算符 (...) returns Object 的可枚举属性作为键值对。但并非所有从 Object 原型继承的类型都具有可枚举的属性,看起来原生 SpeechRecognition 类型就是其中之一——没有可迭代的键,只有不可枚举的属性。 (因此,...(new SpeechRecognition) 甚至没有抛出错误;它尽职尽责地返回了 recognition 的零可枚举属性。这实际上并不令人惊讶,有很多内置的 Javascript 没有可枚举属性的对象类型。)

我认为您需要创建一个具有所需 recognition.lang = 'ja-JP'new SpeechRecognition 实例,然后 setState 到它。据我所知,没有传播或 .assign() 方法可以从旧实例创建新的 SpeechRecognition 实例。我可以看到这会如何造成浏览器正在向多个 SpeechRecognition 实例分配内存的情况;您可能需要发挥创意,并在 setState 完成后 delete 对旧 SpeechRecognition 实例的引用,以便垃圾收集可以完成其工作并只留下一个实例。