Как передать интерполированную строку / динамическое свойство в хеш Javascript? - PullRequest
0 голосов
/ 12 июня 2011

Итак, у меня есть обработчик событий, который в основном такой:

function foo(category_key, category_value){
   ...
   person.set({"data-"+category_key:category_value});
   ...
}

И так, если я сделаю:

foo ("возраст", 12);

Я бы хотел, чтобы функция set ссылалась на ключ "data-age" в этом хэше ... Как я могу оценить ключ так, чтобы указывать "data-age", а не category_key "? Помещение скобок вокруг выражения перед двоеточием приводит к ошибке «Недопустимый идентификатор свойства».

Похоже, я могу просто создать новый объект и передать что-то вроде этого:

function foo(category_key, category_value){
   ...
   var ob = new Object();
   ob["data-"+category_key] = category_value;
   person.set(ob);
   ...
}

Но мне было интересно, есть ли более краткий способ сделать это.

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

Но мне было интересно, есть ли более краткий способ сделать это.

Единственный способ сделать его более лаконичным - использовать {} ( литерал объекта ) вместо new Object() & mdash; и использовать более короткие имена переменных.

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));
    ...
}
1 голос
/ 12 июня 2011

В ECMAScript 5 вы можете использовать Object.defineProperty ( ссылка MDC ).

...