自从我来这里已经有一段时间了。

我正在关注有关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/

10-12 02:59