我正在使用 Phaser 框架制作游戏。我正在使用 Web Speech API 将我的文本转换为语音。这是我的代码的一部分:
我编写的使用 Web Speech API 的函数:
Game.speech = window.speechSynthesis;
Game.speak = function(s, cb) {
var text = new SpeechSynthesisUtterance(s);
text.pitch = 0.3;
text.rate = 0.75;
if (cb) {
text.onend = cb;
}
Game.speech.speak(text);
}
使用该函数的代码(在另一个对象中):
setTimeout(() => Game.speak(this.introText, this.enterShip.bind(this)), 3000);
我注意到有两件事妨碍了我:
首先,如果我不使用bind
传递给回调的函数Game.speak
,代码会运行,但由于上下文的变化,显然会返回错误。
其次,如果我确实使用该bind
函数,则回调不会运行。
所以我尝试记录回调以确保它在那里,如下所示:
if (cb) {
text.onend = cb;
console.log(text.onend);
}
代码运行良好!所以这显然有效,但我想确定原因。为什么我的回调只有在我记录时才被调用?