尝试使用括号表示法访问深度值

时间:2012-02-08 20:16:59

标签: javascript jquery jquery-ui

我正在尝试记录属于一行的对象的位置。所以最后我需要一个综合对象,它在行内有行和“com”的位置。这是我的代码:(g是一个全局对象)

g = {comPos:""}

$(".Com").draggable({
            start: function(event, ui) {
                var thisRow = $(this).closest("div[id^='step']");
                g.thisRowID = thisRow.attr("id");
                g.thisComID = $(this).attr("id");
                console.log(g.thisComID); //returns the id value
            },
            stop: function(event, ui) {
                var thisX = event.pageX;
                var thisY = event.pageY;
                var thisComPos = {
                    id: g.thisRowID,
                    x: thisX,
                    y: thisY
                }
                g.comPos[g.thisRowID][g.thisComID] = thisComPos; //undefined
            }
        });

这是抛出的错误:

"TypeError: Cannot set property 'com1' of undefined"

使用括号表示法我的方式返回undefined。我究竟做错了什么?如果您需要更多代码,请告诉我,我已粘贴了我认为相关的部分。

1 个答案:

答案 0 :(得分:0)

当你这样做时

g.comPos[g.thisRowID][g.thisComID] = thisComPos;

它实际上是查找g.comPos[g.thisRowID],获取结果的对象,然后插入新属性值的快捷方式。换句话说,它相当于

var myTemporaryObject = g.comPos[g.thisRowID];
myTemporaryObject[g.thisComID] = thisComPos;

我猜测如果你这样破坏你的代码,那么中间的“myTemporaryObject”就会为空。

填充该中间对象必须明确地发生;它不仅仅是通过魔法出现在那里。

尝试类似

的内容
g.comPos[g.thisRowID] = g.comPos[g.thisRowID] || {} //create an empty intermediate object if necessary
g.comPos[g.thisRowID][g.thisComID] = thisComPos;