为什么可以't我使用作为值存储在另一个对象中的对象键

Why can't I use object keys which are stored as values in another object?

本文关键字:存储 一个对象 对象 为什么      更新时间:2023-09-26

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

  • 常量.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_vvalue可以变成title_v。因此,我试图避免在多个地方更改它们,只在一个地方更改,即在对象infoPostJsonParamNames中。

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

TypeError: Cannot set property 'title' of undefined

您要做的是动态设置属性名称。您必须使用括号访问;下面的例子应该说明这一点。

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

您的代码以前所做的是在dataI对象中查找一个名为infoPostJsonParamNames的属性。该属性不存在,因此在尝试访问名为title的子属性时出错。

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

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

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

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