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

时间:2015-12-07 16:23:51

标签: javascript google-chrome-extension javascript-objects

我正在制作Chrome扩展程序,其中两个js文件是 -

  • constants.js
  • main.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和price ,在许多地方使用代码,但将来可能会更改,例如, title_value可能会变为TITLE_v 。 所以我试图避免在很多地方更改它们,只需在一个地方更改它们,即在对象infoPostJsonParamNames中。

但这样做会给我一个错误:

TypeError: Cannot set property 'title' of undefined

2 个答案:

答案 0 :(得分:1)

您要做的是动态设置属性名称。你必须使用括号访问;以下示例应澄清它。

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

您的代码之前在做的是在infoPostJsonParamNames对象中查找名为dataI的属性。该属性不存在,因此在尝试访问名为title的子属性时会导致错误。

答案 1 :(得分:0)

您在infoPostJsonParamNames范围内错过了dataI初始化。

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

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

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