自从我来这里已经有一段时间了。
我正在关注有关JavaScript文本库冒险的教程。非常基础的教程。我有一个改变房间的功能。我了解其背后的逻辑,并且可以正常工作。
在进入goInside()之前,它不会给我错误。
property 'description' of undefined
at goInside (core.js:58)
at playerInput (core.js:94)
at HTMLDocument.<anonymous> (core.js:114)
at HTMLDocument.dispatch (jquery-3.2.1.min.js:3)
at HTMLDocument.q.handle (jquery-3.2.1.min.js:3)
goInside @ core.js:58
playerInput @ core.js:94
(anonymous) @ core.js:114
dispatch @ jquery-3.2.1.min.js:3
q.handle @ jquery-3.2.1.min.js:3
function changeRoom(dir) {
if (rooms[currentRoom].directions[dir] !== undefined) {
currentRoom = rooms[currentRoom].directions[dir]
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
} else {
$('#game-text').append("<p>You cannot go that way!</p>");
}
}
这是房间变量,我花了一点时间来了解格式。我添加了建筑物作为一种选择,其作用与指示相同。
var rooms = {
"start": {
"description": "You are in Town waiting for something to happen",
"details": "You notice a house and a shop. Should you explore?",
"directions": {
"north": "bridge",
"west": "clearing"
},
"buildings": {
"shop": "shop",
"house": "house"
},
"items": ["water", "stick"],
"minlvl": "1",
},
当前房间正在启动。您可以输入“往北”。它将改变房间的罚款。但是,如果我想使用4种以上的不同方式怎么办?我以为这可能有效,但无法弄清楚我哪里出了问题。我重用了该功能,但切换了元素。
function goInside(building) {
if (rooms[currentRoom].buildings[building] !== undefined) {
currentRoom = rooms[currentRoom].buildings[building],
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
} else {
$('#game-text').append("<p>You cannot go that way!</p>");
}
}
不是在寻找可以为我编程的人,只是在解释我可能会缺少的逻辑。对于任何反馈,我们都表示感谢。谢谢。
编辑。
调查您的解决方案,我使用了if语句,但仍然出现下面的错误。我不明白,因为changeRooms可以很好地显示说明,而goInside是changeRooms的副本。
Uncaught TypeError: Cannot read property 'description' of undefined
at goInside (core.js:58)
at playerInput (core.js:94)
at HTMLDocument.<anonymous> (core.js:114)
at HTMLDocument.dispatch (jquery-3.2.1.min.js:3)
at HTMLDocument.q.handle (jquery-3.2.1.min.js:3)
goInside @ core.js:58
playerInput @ core.js:94
(anonymous) @ core.js:114
dispatch @ jquery-3.2.1.min.js:3
q.handle @ jquery-3.2.1.min.js:3
58号线
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
第94行是goInside函数
case "explore":
var building = input.split(" ")[1];
goInside(building);
break;
最佳答案
关于错误的最直接的提示来自错误:Uncaught TypeError: Cannot read property 'description' of undefined
。查看您在哪里尝试阅读description
:
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
因此,
rooms[currentRoom]
返回undefined
。一个合理的解释是,如果您尝试输入例如“商店”,但未定义rooms['shop']
。确保您有一个为“商店”定义的房间,即rooms = {
"shop": {
// definition similar to "start" etc.
}
// ... the rest of the rooms
}
关于javascript - 对变量,函数及其背后的逻辑有疑问吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52826073/