我正在制作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和price ,在许多地方使用代码,但将来可能会更改,例如, title_value可能会变为TITLE_v 。
所以我试图避免在很多地方更改它们,只需在一个地方更改它们,即在对象infoPostJsonParamNames
中。
但这样做会给我一个错误:
TypeError: Cannot set property 'title' of undefined
答案 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
}
}