Javascript 为什么可以';我是否使用存储为另一个对象中的值的对象键?
我正在做一个chrome扩展,其中两个js文件是-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", }; 在
- 常数.js
- main.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参数名称。