有没有一种方法可以创建一个对象并同时为其指定一个动态特性

Is there a way to create an object and assign it a dynamic property simultaneously?

本文关键字:动态 一个 方法 一种 有没有 一个对象 创建      更新时间:2023-09-26

这可能是一个愚蠢的问题,但我正在寻找一种简洁的方法来创建一个对象,使用对象文字符号,并为其分配一个动态属性。

现在,我是这样做的:

var foo = "lol";
var obj = {};
obj[foo] = "bar";
return obj;
// --> returns {lol:"bar"}

我想做这样的事情:

var foo = "lol";
return ({}[foo] = "bar");
// --> returns {lol:"bar"}

有什么模式可以做到这一点吗?我不太关心可读性,尽管如果可能的话,我正在寻找一些紧凑的东西。

我可以这样做,但它相当大,非常像将语句拆分为多行。

var foo = "lol", obj;
return (obj = {}) && (obj[foo] = "bar") && obj;

编写一个简单的函数,将名称:值对作为连续参数,类似于:

function dataBlob() {
  var args = arguments;
  for(var x = 0; x < arguments.length -1; x=x+2) {       
   this[args[x]] = args[x+1];
  }
  return this;
}

假设我的JavaScript没有萎缩到上述毫无意义的地步,可以用作:

var obj = dataBlob("lol","bar", "lolz", 42);

这相当于JSON风格的

var obj = {lol:"bar", lolz:42};

JSFidle示例

您可以将此方法添加到Object.prototype中以获得出色的功能:

Object.prototype.push = function( key, value ){
   this[ key ] = value;
   return this;
}
var foo = "lol";
var obj = {};
obj.push(foo, "bar")
=>
Object {lol: "bar", push: function}

jsFiddle Demo

您正在寻找Object.definePropertyMDN方法。您可以定义一个新对象,并使用它分配动态属性。

function test(){
 var foo = "lol";
 return Object.defineProperty({},foo,{value:"bar"});    
}
alert(test().lol);

我不太喜欢基于函数的答案,我宁愿有某种表达式。

我想出了更紧凑的形式:

var obj, foo = "lol";
return ((obj = {})[foo] = "bar") && obj;

如果我能在表达式中包含var obj,那就太酷了。不知道怎么做。如果我不必定义obj变量,那将是终极的。