如何将插值的字符串/动态属性传递给Javascript哈希?

问题描述

| 所以我有一个事件处理程序,基本上是这样的:
function foo(category_key,category_value){
   ...
   person.set({\"data-\"+category_key:category_value});
   ...
}
而且,如果我这样做: foo(\“ age \”,12); 我希望set函数引用该哈希中的\“ data-age \”键...如何评估该键,以便引用\“ data-age \”而不是\“ category_key \”?在冒号之前抛出括号,并引发\“ invalid property id \”错误。 看来我可以制作一个新对象并传递如下内容
function foo(category_key,category_value){
   ...
   var ob = new Object();
   ob[\"data-\"+category_key] = category_value;
   person.set(ob);
   ...
}
但是我想知道是否还有更简洁的方法。     

解决方法

           但是我想知道是否还有更简洁的方法。 使其更简洁的唯一方法是使用
{}
(对象文字)而不是
new Object()
—并使用较短的变量名。
function foo(key,value)
{
    ...
    var ob = {};
    ob[\'data-\'+key] = value;
    person.set(ob);
    ...
}
它并不一定会使整个代码短一些,但是您可以将该逻辑放入一个单独的函数中:
function bar(k,v)
{
    var o = {};
    o[k] = v;
    // or o[\'data\'+k] = v;
    return o;
}

function foo(key,value)
{
    ...
    person.set(bar(\'data-\'+key,value));
    // or person.set(bar(key,value));
    ...
}
    ,        在ECMAScript 5中,您可以使用
Object.defineProperty
(MDC参考)。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...