Оператор распространения объекта (...
) возвращает перечисляемые свойства Object
в виде пар ключ-значение. Но не все типы, которые наследуются от прототипа Object
, имеют перечисляемые свойства, и похоже, что родной тип SpeechRecognition
является одним из них - здесь нет итеративных ключей, только неперечислимые атрибуты. (Таким образом, ...(new SpeechRecognition)
даже не выдает ошибку; он покорно возвратил нулевые перечислимые свойства recognition
. На самом деле это не так уж удивительно, есть много встроенных типов объектов Javascript, которые не имеют перечислимых свойства.)
Я думаю, вам нужно будет создать new SpeechRecognition
экземпляр с желаемым recognition.lang = 'ja-JP'
, а затем setState
для этого. Я не знаю ни одного метода распространения или .assign()
, который создает новые экземпляры SpeechRecognition
из старых. Я вижу, как это может создать ситуацию, в которой есть несколько SpeechRecognition
экземпляров, для которых браузер выделяет память; вам может потребоваться проявить творческий подход и delete
ссылку на старый экземпляр SpeechRecognition
после завершения setState
, чтобы сборщик мусора мог выполнить свою работу и оставить вам только один экземпляр.