Javascript 为什么可以';我是否使用存储为另一个对象中的值的对象键?

Javascript 为什么可以';我是否使用存储为另一个对象中的值的对象键?,javascript,google-chrome-extension,javascript-objects,Javascript,Google Chrome Extension,Javascript Objects,我正在做一个chrome扩展,其中两个js文件是- 常数.js main.js 在constants.js中,我定义了一个对象- var infoPostJsonParamNames = {"pid" : "PID", "title" : "title_value", "price" : "price", }; 在

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

  • 常数.js
  • main.js
在constants.js中,我定义了一个对象-

var infoPostJsonParamNames = {"pid" : "PID",
                              "title" : "title_value",
                              "price" : "price",
                             };
在main.js中,我使用InfoPostJSonParamName中的值作为其他对象的键,如-

    dataI = new Object();
    dataI.infoPostJsonParamNames["title"] = "Title value";
    dataI.infoPostJsonParamNames["cost"] = 12.34;
这样做的原因是,我必须在代码中的许多地方使用相同的键名称(例如在POST请求中),即PID、title_值和price,但将来可能会更改,例如,title_值可以变成title_v。 因此,我试图通过仅在一个位置(即在对象
infoPostJsonParamNames
中)更改它们来避免在多个位置更改它们

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

TypeError: Cannot set property 'title' of undefined

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

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

dataI[infoPostJsonParamNames[“title”]]
data[infoPostJsonParamNames.title]
的子属性时,它导致了一个错误。为了将来处理该代码的人,请选择一个较短的名称。@Pointy oops,成功了!Thanks@Pointyvar infoPostJsonParamNames后面的行是var ipjpn=infoPostJsonParamNames;OP使用
infoPostJsonParamNames
作为一种简单的方法,允许从单个位置更改HTTP参数名称。