2015-10-09 4 views
0

Это просто пример:Pass литерал объекта к объекту с именем переменной внутри функции

var foo = "foo1"; 
fooFunction({ 
    bar: { 
     foo : value 
    } 
}); 

Свойство будет называться foo вместо foo1.

Как можно называть его foo1?

+0

Это недопустимый синтаксис, функция должна иметь имя – Tushar

+2

, можете ли вы уточнить, что вы хотите сделать? вы пытаетесь передать объект в качестве параметра, и вы хотите, чтобы foo1 был ключевым внутренним баром? тот факт, что код не соответствует правильному синтаксису в отношении функции, делает его несколько запутанным для того, чего вы пытаетесь достичь. – rvalerio

+0

Это просто пример, но я отредактирую его с допустимым синтаксисом – Rafael

ответ

2

Вы не можете указать динамическое имя свойства в объектном литерале, вам нужно будет добавить свойство после создания объекта.

var foo = "foo1"; 
var obj = { 
    bar: {} 
}; 
obj.bar[foo] = value; 
function(obj); 
+0

Могу ли я использовать что-то вроде '[foo]: value'? Я помню, как некоторое время назад видел его где-то – Rafael

+0

Если вы ориентируетесь только на самые последние браузеры, конечно. Тогда идите с ответом Амита. –

1

Нет ничего особенного в литературе объекта при использовании в качестве входа в вызов функции. Правила объектных литералов применяются везде, где они используются, включая назначение, входные параметры, разрушение (ES2015) или любое другое использование, которое я мог бы оставить без внимания.

Это возможно с помощью ES2015, чтобы сделать это с небольшим изменением:

var foo = "foo1"; 
fooFunction({ 
    bar: { 
     [foo] : value 
    } 
}); 

Это называется вычислен имя свойства.

+0

Я видел, что некоторое время назад я это пробовал, но моя IDE заявила, что синтаксис неверен, поэтому я не тестировал его. И как узнать, использует ли браузер эту спецификацию и какие браузеры работают с этой спецификацией? Можете ли вы обновить свой ответ? – Rafael

+0

@ Rafael - большинство браузеров не будут наивно поддерживать это сегодня. Если вы хотите использовать это надежно, используйте транспилер. Что касается обновления ответа, я не хочу этого делать. Ответы здесь, чтобы остаться, но функция поддержки меняется каждый день. Я не думаю, что имеет смысл, что ответ будет неправильным в (потенциально) ближайшем будущем. – Amit

+0

Что такое транспилер? – Rafael

Смежные вопросы