有没有一种方法可以创建一个对象并同时为其指定一个动态特性
Is there a way to create an object and assign it a dynamic property simultaneously?
这可能是一个愚蠢的问题,但我正在寻找一种简洁的方法来创建一个对象,使用对象文字符号,并为其分配一个动态属性。
现在,我是这样做的:
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
变量,那将是终极的。
相关文章:
- 使用javascript将动态表从一个html页面打印到另一个html页
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- 是否可以仅通过jQuery将图像替换为用户动态选择的另一个图像
- 动态构建一个数据表与scriplets
- 动态创建一个javascript/jquery多级数组
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 将动态元素绑定到函数;只剩下一个绑定
- 为json对象创建一个动态表
- 动态修改一个元素,使其与给定的选择器匹配
- 如何查找一个单词在动态创建的html表行中出现的次数
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 为node.js创建一个动态的restful api
- Javascript动态表,每个单元格都有一个onmouse事件
- 我如何创建一个动态地图来显示我们公司的位置
- 让ASP.NET中继器设置一个动态名称
- 在Javascript中连接一个动态变量名
- 在javascript中动态添加一个选择下拉菜单