Javascript 比较值-无法访问对象的name属性

Javascript 比较值-无法访问对象的name属性,javascript,Javascript,我正在尝试修改一个javascript游戏。它有各种对象,如精灵、瓷砖、物品等。 到目前为止,我已经能够比较一个精灵的名称值来改变与它交互时产生的声音 即: 当我尝试与项目交互时,问题就出现了。相同的代码对它们不起作用 after('onInventoryChanged', function () { //does not work if (item[id].name === "smokes"){ sounds.lighter(); } els

我正在尝试修改一个javascript游戏。它有各种对象,如精灵、瓷砖、物品等。 到目前为止,我已经能够比较一个精灵的
名称
值来改变与它交互时产生的声音

即:

当我尝试与项目交互时,问题就出现了。相同的代码对它们不起作用

after('onInventoryChanged', function () { //does not work
    if (item[id].name === "smokes"){
        sounds.lighter();
    } else {
        sounds.birdrobin();
    }
});
项目和精灵之间的唯一区别是,精灵是唯一的,不能有两个具有相同
名称
属性的精灵。另一方面,您可以拥有任意多个具有相同
名称的项目

不过我还是被弄糊涂了,因为精灵和物品对象都是由相同的代码“生成”的,我应该能够访问物品中的name变量

function parseItem(lines, i) {
    var id = getId(lines[i]);
    var drwId = null;
    var name = null;
    //item data
    item[id] = {
        id : id,
        drw : drwId, //drawing id
        col : colorIndex,
        dlg : dialogId,
        name : name
    };
    return i;
}

function parseSprite(lines, i) {
    var id = getId(lines[i]);
    var drwId = null;
    var name = null;
        //sprite data
    sprite[id] = {
        id : id,
        drw : drwId, //drawing id
        col : colorIndex,
        dlg : dialogId,
        inventory : startingInventory,
        name : name
    };
    return i;
}
任何帮助都是欢迎的,因为过去几天我一直被困在这里

如果我能提供任何其他信息,请随时询问。我只是不想从一开始就把问题搞得一团糟

编辑1:

item[id].name
用于在画布上绘制对象,因此我应该能够访问它

    for (id in item) {
        worldStr += "ITM " + id + "\n";
        worldStr += serializeDrawing( "ITM_" + id );
        if (item[id].name != null && item[id].name != undefined) {
            /* NAME */
            worldStr += "NAME " + item[id].name + "\n";
        }
        if (item[id].dlg != null) {
            worldStr += "DLG " + item[id].dlg + "\n";
        }
        if (item[id].col != null && item[id].col != undefined && item[id].col != 2) {
            /* COLOR OVERRIDE */
            worldStr += "COL " + item[id].col + "\n";
        }
        worldStr += "\n";
    }
编辑2:

我取得了一点“进步”。现在,
onInventoryChange
确实会发出声音,但不是正确的声音。我有一件商品名为smokes,我有一件商品名为beer。产生的声音在
else
部分,即使我与烟和啤酒互动时也是如此

after('onInventoryChanged', function () {
    if (item.name === "smokes"){
        sounds.lighter();
    } else if (item.name === "beer") {
        sounds.bottleCap();
    } else {
        sounds.birdrobin();
    }
});

谢谢

您所说的“无法访问名称”属性到底是什么意思?
console.log(项[id].name)
输出什么?是否
未定义
?可能
item[id]
id
本身没有定义。还有一件事,我没有看到在
的回调函数之后,这些项是
的参数,它们是全局定义的吗?@GhassenLouhaichi我无法访问控制台日志(F12不工作)。因为它是编译的。我所说的不能访问name属性的意思是,当我进行比较时,实际上没有声音出来(甚至没有声音)。函数本身可以工作,因为如果我删除条件语句,只添加音频文件,它就会播放。
之后的
是一个“钩子”。这个游戏的基本工作原理是,你在浏览器中制作一张地图,上面有精灵项目等,然后下载一个html文件到你的电脑上(这就是游戏)。然后,您需要编辑html文件,添加一个“mod”,将操作(例如,
onPlayerMoved
)与您输入到html文件夹的声音文件挂钩。您是否选中了item.name,您正在获取的onInventoryChanged?我想应该是项目[id]。名称
after('onInventoryChanged', function () {
    if (item.name === "smokes"){
        sounds.lighter();
    } else if (item.name === "beer") {
        sounds.bottleCap();
    } else {
        sounds.birdrobin();
    }
});