2009-02-22 5 views

ответ

10

Сделайте свои переменные членами объекта. Затем вы можете использовать [] для доступа к элементам объектов с помощью строки:

var byname = { 
    divabc: ..., 
    divxyz: ... 
}; 

function someFunction(link) { 
    someOtherFunction(byname['div'+link]); 
} 

someFunction('abc'); // calls someOtherFunction(byname.divabc) 
2

Вы должны быть в состоянии выполнить это с помощью функции 'eval'.

0

Как wybiral сказал, все, что вам нужно Eval:

someFunction(link) { 
    someOtherFunction(eval('(div' + link + ')'); 
} 

В основном то, что она делает это оценивает содержимое строки в качестве кода. Очевидно, что eval - опасный маленький инструмент, поскольку он позволяет выполнять произвольный код, поэтому будьте осторожны при его использовании.

+0

Можете ли вы объяснить логику внутреннего большинства набора круглых скобок? –

+0

RyOnLife: в этом примере они не предназначены для какой-либо конкретной цели, но полезно скопировать все ваши строки eval в круглые скобки. Вот почему: http://techiella.wordpress.com/2008/09/04/javascript-eval/ –

8

Для такого динамического строительства/доступа имен переменных следует использовать альтернативный объект обозначения, где:

object.member === object["member"] 

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

3

eval будет делать это, но это обычно указывает на некоторые другие проблемы с программой, когда вы хотите синтезировать идентификаторы, подобные этому. Как говорит Ionut, лучше использовать нотацию []. Мне нравится ссылаться на this, когда возникают такие вопросы.

1

Попробуйте это:

var divFoo = "bar"; 
function someFunction(link) { 
    someOtherFunction(this['div' + link]); 
} 
function someOtherFunction(value) { 
    alert(value); 
} 
someFunction("Foo");