javascript - 未捕获的类型错误:无法读取未定义的属性“说话”?
问题描述
我是 javascript 的新手,我看不到问题,因为整个代码是正确的。必须出现在控制台中的预期输出是:
Hello Yaakov
Good Bye John
Good Bye Jen
Good Bye Jason
Hello Paul
Hello Frank
Hello Larry
Hello Paula
Hello Laura
Good Bye Jim
但它一直告诉我无法读取属性“说话”。
/* script.js*/
(function() {
var helloSpeaker;
var byeSpeaker;
var names = ["Yaakov", "John", "Jen", "Jason", "Paul", "Frank", "Larry", "Paula", "Laura", "Jim"];
for (var i = 0; i < names.length; i++) {
var firstLetter = names[i].charAt(0).toLowerCase();
if (firstLetter === 'j') {
byeSpeaker.speak(names[i]);
} else {
helloSpeaker.speak(names[i]);
}
}
})();
/* speakhello.js*/
(function(window) {
var helloSpeaker = new Object();
var speakWord = "hello"
helloSpeaker.speak = function(name) {
console.log(speakWord + "" + name);
};
window.helloSpeaker = helloSpeaker;
})(window);
/*speakgoodbye.js*/
(function(window) {
var byeSpeaker = new Object();
var speakWord = "Good Bye";
byeSpeaker.speak = function(name) {
console.log(speakWord + "" + name);
};
window.byeSpeaker = byeSpeaker;
})(window);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Module 4 Solution Starter</title>
<script src="SpeakHello.js"></script>
<script src="SpeakGoodBye.js"></script>
<script src="script.js"></script>
</head>
<body>
<h1>Module 4 Solution Starter</h1>
</body>
</html>
解决方案
不要声明局部变量helloSpeaker
和byeSpeaker
在script.js
. 他们阻止访问在其他 JS 文件中分配的全局变量。
/* speakhello.js*/
(function(window) {
var helloSpeaker = new Object();
var speakWord = "hello"
helloSpeaker.speak = function(name) {
console.log(speakWord + "" + name);
};
window.helloSpeaker = helloSpeaker;
})(window);
/*speakgoodbye.js*/
(function(window) {
var byeSpeaker = new Object();
var speakWord = "Good Bye";
byeSpeaker.speak = function(name) {
console.log(speakWord + "" + name);
};
window.byeSpeaker = byeSpeaker;
})(window);
/* script.js*/
(function() {
var names = ["Yaakov", "John", "Jen", "Jason", "Paul", "Frank", "Larry", "Paula", "Laura", "Jim"];
for (var i = 0; i < names.length; i++) {
var firstLetter = names[i].charAt(0).toLowerCase();
if (firstLetter === 'j') {
byeSpeaker.speak(names[i]);
} else {
helloSpeaker.speak(names[i]);
}
}
})();
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Module 4 Solution Starter</title>
<script src="SpeakHello.js"></script>
<script src="SpeakGoodBye.js"></script>
<script src="script.js"></script>
</head>
<body>
<h1>Module 4 Solution Starter</h1>
</body>
</html>
推荐阅读
- delphi - 使用匿名方法中的开放数组参数“无法捕获符号”错误,该方法传递给另一个函数
- android - 是否可以在工具栏上放置搜索按钮但仅用于主页视图?
- python - 列表列中最常见的元素
- google-custom-search - 我可以只使用没有谷歌自定义搜索 API 接口的结果吗?
- sql-server - 如何从选择查询中加入两个别名表
- c++ - 某些函数/方法未导出到静态库 - Visual Studio 2019 C++
- c# - 将点击行为添加到 Xamarin 标签
- nutch - Nutch http.redirect.max 我可以知道它是什么意思吗
- excel - 当我在 Excel 中循环遍历形状时,为什么我的代码会崩溃?幽灵形状?
- python - Python RE匹配不是左括号然后是字符串