为什么我不能使用作为值存储在另一个对象中的对象键?

Why can't I use object keys which are stored as values in another object?

我正在做一个 chrome 扩展,其中两个 js 文件是-

在 constants.js 中,我定义了一个对象 -

var infoPostJsonParamNames = {"pid" : "PID",
                              "title" : "title_value",
                              "price" : "price",
                             };

并且在 main.js 中,我使用 infoPostJsonParamNames 中的值作为其他对象的键,例如 -

    dataI = new Object();
    dataI.infoPostJsonParamNames["title"] = "Title value";
    dataI.infoPostJsonParamNames["cost"] = 12.34;

这样做的原因是我必须使用相同的密钥名称(例如在 POST 请求中),即 PID、title_value 和价格,在代码中有很多地方但是以后可能会发生变化,比如title_value可以变成TITLE_v。 所以我试图通过只在一个地方更改它们来避免在许多地方更改它们,即在对象 infoPostJsonParamNames.

但是这样做会给我错误:

TypeError: Cannot set property 'title' of undefined

您错过了 infoPostJsonParamNamesdataI 范围内的初始化。

dataI = {};
dataI.infoPostJsonParamNames = {};
dataI.infoPostJsonParamNames["title"] = "Title value";
dataI.infoPostJsonParamNames["cost"] = 12.34;

顺便说一句,你也可以这样做:

dataI = {
  infoPostJsonParamNames: {
    title: = "TitleValue",
    cost: 12.34
  }
}

您想要做的是动态设置一个 属性 名称。您必须使用括号访问;下面的例子应该可以说明这一点。

dataI = new Object(); // or {} for style points;
var titlePropertyName = infoPostJsonParamNames.title;
dataI[titlePropertyName] = "Title value";

您的代码之前所做的是在您的 dataI 对象中寻找名为 infoPostJsonParamNames 的 属性。 属性 不存在,因此在尝试访问名为 title.

的子 属性 时导致错误