2011-06-07 2 views
2

Скажем, у меня уже есть много объектов, как obj1, obj2, ..... obj30 .....Передача объекта в JavaScript функция

Сейчас я пытаюсь написать функцию, как это:

function blar(N){ 
do something to objN 
} 
blar('4'); 

до сих пор, кажется, что единственный способ сделать это является

function blar(thisObj){ 
do something to thisObj 
} 
blar(obj4); 

Интересно, что это правильный путь, чтобы передать N такое, что функция может использовать это значение N для обработки objN.

Надеюсь, я даю себе понять.

PS: Я даже пытаюсь что-то вроде blar (obj + N), но, видимо, это тоже неправильно, поскольку система пытается найти obj, которого не существует.

+0

Объект ... Номер. Позвольте мне попробовать еще раз: Object, Number ... –

ответ

2

Использование square bracket notation.

window['obj' + N]; 

Это зависит от того, что они висели от объекта окна и не были в хорошем состоянии.

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

myArray[N]; 
+0

О, почему я никогда не думаю о массиве. Спасибо за отличный совет! – Vern

0

Использование Eval:

function blar(N) { 
    var obj = eval("obj"+N); 
} 

Или, если вы можете поместить эти объекты в объект, вы можете использовать []

function blar(N) { 
    var obj = tracker["obj" + N]; 
} 
0

Это довольно просто:

function blar(objectNo) { 
    var obj = eval('obj' + objectNo); 
    alert(obj); 
} 

Чтобы предоставить вам несколько ключевых слов для r беседуя с другими об этом: то, что вы хотите сделать, - это получить доступ к объекту по его имени в текущей области.

Но обратите внимание, что следующее не работает:

function main() { 
    var a = 1, b = 2, c = 3; 

    blar('a'); // doesn't work 
    doSomething(eval('a')); // works 
} 

Это происходит потому, что переменная a видна только в функции main, но не в blar. То есть, eval должен вызываться в области видимости переменной.

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