为什么我不能使用作为值存储在另一个对象中的对象键?
Why can't I use object keys which are stored as values in another object?
我正在做一个 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 和价格,在代码中有很多地方但是以后可能会发生变化,比如title_value可以变成TITLE_v。
所以我试图通过只在一个地方更改它们来避免在许多地方更改它们,即在对象 infoPostJsonParamNames
.
中
但是这样做会给我错误:
TypeError: Cannot set property 'title' of undefined
您错过了 infoPostJsonParamNames
在 dataI
范围内的初始化。
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
.
的子 属性 时导致错误
我正在做一个 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 和价格,在代码中有很多地方但是以后可能会发生变化,比如title_value可以变成TITLE_v。
所以我试图通过只在一个地方更改它们来避免在许多地方更改它们,即在对象 infoPostJsonParamNames
.
但是这样做会给我错误:
TypeError: Cannot set property 'title' of undefined
您错过了 infoPostJsonParamNames
在 dataI
范围内的初始化。
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
.