0

我创建了一个这样的 js 对象:

var JSONObject = {};

和一个函数创建一个元素并将其添加到JSONObject

function addShape(JSONObject, shapeStruct)
{
    var sh = "shape"+shapeStruct.id.toString();
    JSONObject.sh={
    "id": shapeStruct.id,
    "x1": shapeStruct.x1,
    "x2": shapeStruct.x2,
    "y1": shapeStruct.y1,
    "y2": shapeStruct.y2
    };
}

这个函数在一个单独的文件中。

我用它来称呼它:

shapeId++;
singleShapeStruct = {"id":shapeId, "x1":oldX, "x2":correctedX, "y1":oldY, "y2":yCanvas};
addShape(JSONObject, singleShapeStruct);
alert(JSONObject.shape0.x1);

警报没有给出任何东西。

感谢您的帮助

4

3 回答 3

2

当您将任何内容分配给 时JSONObject.sh,它不会使用变量sh。属性的名称将是"sh",而不是变量的值sh

要使用变量来命名属性,请使用括号语法:

JSONObject[sh] = ...
于 2013-06-19T08:44:41.003 回答
1

由于您有一个具有实际键的变量,因此您需要使用括号表示法而不是点表示法作为成员运算符

function addShape(JSONObject, shapeStruct)
{
    var sh = "shape"+shapeStruct.id.toString();
    JSONObject[sh]={
    "id": shapeStruct.id,
    "x1": shapeStruct.x1,
    "x2": shapeStruct.x2,
    "y1": shapeStruct.y1,
    "y2": shapeStruct.y2
    };
}
于 2013-06-19T08:44:57.353 回答
0

这里JSONObject不包含该sh属性。

您必须将JSONObject .sh对象初始化为

JSONObject[sh] = 
{
    "id" : .....
    "x1" : .....
    .
}

对变量值使用方括号表示法作为名称(动态).. 不是通过点运算符。点运算符需要初始化属性的静态名称。

于 2013-06-19T08:51:47.240 回答