"非法援引"简单脚本上的错误

时间:2017-09-03 13:42:57

标签: javascript

我想搞乱语音识别API,所以我从简单的页面开始,点击body元素开始识别。我的scripts.js文件是:

var recognition = new window.webkitSpeechRecognition();
document.body.addEventListener("click", recognition.start, false);

现在当我点击body元素上的任何地方时,我在Chrome控制台中出现了一个奇怪的错误:

Uncaught TypeError: Illegal invocation

它指的是我的HTML代码的第一行。我的HTML文件是:

<!DOCTYPE html>
<html lang="en">
<head>
    <title></title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <script src="scripts.js"></script>
</body>
</html>

如何解决这个奇怪的错误?

1 个答案:

答案 0 :(得分:3)

你失去了背景:

document.body.addEventListener("click", recognition.start, false);

等于:

var start = recognition.start;
document.body.addEventListener("click", start, false);

所以在开始之内,这个将引用 window ,而Windows无法说话。要解决它,请绑定:

document.body.addEventListener("click", recognition.start.bind(recognition), false);

或使用中间的函数:

document.body.addEventListener("click", _=>recognition.start(), false);