0

我正在使用 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);
}

代码运行良好!所以这显然有效,但我想确定原因。为什么我的回调只有在我记录时才被调用?

4

0 回答 0