将 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
实例的引用,以便垃圾收集可以完成其工作并只留下一个实例。
所以,我设置了
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
实例的引用,以便垃圾收集可以完成其工作并只留下一个实例。