如何在不对其进行硬编码的情况下使用特定变量值自定义对象的属性名称?

时间:2018-02-02 16:06:35

标签: javascript javascript-objects

我正在为学校项目创建一个URL解析器。我首先将来自url的完整查询解析为数组,因为查询成员之间用“&”分隔。

var queryString = /\?(\&?\w+\=\w+)+/.exec(urlString))[0].split("&");

每个数组成员看起来像:

arr[i] = "field=value";

我在一个Object构造函数中这样做,我需要返回一个“HTTPObject”。对于赋值,HTTPObject必须具有名为“query”的属性,并且查询应具有许多属性(url中的每个查询字段都有一个属性)。为什么这不起作用?

queryString.forEach(function(element) {
    var elementArr = element.split("=");
    this.query.elementArr[0] = elementArr[1];
  });

2 个答案:

答案 0 :(得分:0)

你不能设置这样的属性 - 但你可以使用bracket notation

试试这个

queryString.forEach(function(element) {
    var elementArr = element.split("=");
    this.query[elementArr[0]] = elementArr[1];
  });

答案 1 :(得分:0)

你非常接近。您可以使用方括号按名称引用对象属性...



var queryString = ["name1=value1", "name2=value2"];
var query = {};

queryString.forEach(function(element) {
    var elementArr = element.split("=");
    query[elementArr[0]] = elementArr[1];
});

var varName = "name1";

console.log("by variable : " + query[varName]);  // can use a variable
console.log("by string   : " + query["name1"]);  // can use a string
console.log("by propname : " + query.name1);     // can hardcode the property name
console.log("query object:");
console.log(query);